Je sais qu'il est une vieille question, mais puisqu'il n'y a pas de réponse, je vais faire un essai avec ceci:
SQL Fiddle
MySQL 5.5.32 Configuration du schéma:
CREATE TABLE Table1
(`Id` int, `Sentence` varchar(80))
;
INSERT INTO Table1
(`Id`, `Sentence`)
VALUES
(1, 'Mister John is going to Los Angeles')
;
CREATE TABLE Table2
(`Id` int, `Word` varchar(60), `Abbrev` varchar(10))
;
INSERT INTO Table2
(`Id`, `Word`, `Abbrev`)
VALUES
(1, 'Mister', 'Mr.'),
(2, 'Los Angeles', 'L.A.')
;
DROP PROCEDURE IF EXISTS updateSentences //
CREATE PROCEDURE updateSentences()
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count
FROM Table1
INNER JOIN Table2 ON CONCAT(' ',Sentence,' ') LIKE CONCAT('%',Word,'%');
WHILE count > 0 DO
UPDATE Table1
INNER JOIN (SELECT t1.id, Word,Abbrev
FROM Table1 t1
INNER JOIN Table2 ON CONCAT(' ',Sentence,' ') LIKE CONCAT('%',Word,'%')
LIMIT 1) Table2 ON Table1.Id = Table2.Id
SET Sentence = REPLACE(Sentence,Word,Abbrev);
SELECT COUNT(*) INTO count
FROM Table1
INNER JOIN Table2 ON CONCAT(' ',Sentence,' ') LIKE CONCAT('%',Word,'%');
END WHILE;
END//
Demande:
SELECT *
FROM Table1
[Résultats]:
| ID | SENTENCE |
|----|-------------------------------------|
| 1 | Mister John is going to Los Angeles |
Recherche:
CALL updateSentences()
SELECT *
FROM Table1
Results:
| ID | SENTENCE |
|----|---------------------------|
| 1 | Mr. John is going to L.A. |
Je ne pense pas qu'il soit possible de le faire avec pur SQL , quelle langue planifiez-vous pour nous e? Y a-t-il des problèmes de performance? Est-ce que ce sera fréquent? – Clash
Je cherchais pur SQL (MySQL), pas de soucis de performance, pas fréquent. – Llynix