我有一個表A
與一列充滿句子。通過表的SQL替換
我有另一張表B
與兩列:單詞和縮寫。
我想查看錶A
的列句,並且如果表B
的單詞列匹配的單詞匹配,則用縮寫替換它。
希望是明確的。
案件無所謂,我可以處理。假設一切都較低或較高或任何。
我有一個表A
與一列充滿句子。通過表的SQL替換
我有另一張表B
與兩列:單詞和縮寫。
我想查看錶A
的列句,並且如果表B
的單詞列匹配的單詞匹配,則用縮寫替換它。
希望是明確的。
案件無所謂,我可以處理。假設一切都較低或較高或任何。
你不能單獨使用SQL來完成這個工作,你需要從數據庫中提取數據,操縱它,然後再推回去。
有很多方法可以做到這一點,有些更簡單,其他人更有效。
例如一個簡單的,但緩慢的方法是(以僞)...
sentence_list = db.execute("SELECT id, sentence FROM A")
for sentence in sentence_list do
words = tokenize(sentence.text)
for word in words do
abbrev = db.execute("SELECT abbrev FROM B WHERE word=word")
if abbrev
word = abbrev
sentence.text = concat(words)
db.execute("UPDATE A SET sentence=" + sentence.text + " WHERE id = " + sentence.id + ")")
那才做的每一個字的查詢中的每一句話,不推薦對性能至關重要的情況,但它的工作。
你可能會瘋了,並在Excel中添加一個MySQL odbc連接。查詢一個查詢表中的句子,查詢另一個表中的查詢詞,然後編寫一個刷新表的小宏,然後執行查找和替換操作,然後將其重新導入到表中。我知道在Ms sql中,您可以在DTS/SSIS中自動執行所有這些操作。
我知道這是一個老問題,但由於沒有答案,我給這個一試:
MySQL的32年5月5日架構設置:
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//
查詢:
SELECT *
FROM Table1
結果:
| ID | SENTENCE |
|----|-------------------------------------|
| 1 | Mister John is going to Los Angeles |
查詢:
CALL updateSentences()
SELECT *
FROM Table1
| ID | SENTENCE |
|----|---------------------------|
| 1 | Mr. John is going to L.A. |
我不認爲這是可能的純SQL來做到這一點,你打算使用哪種語言è?是否有任何性能問題?這會頻繁嗎? – Clash 2010-01-07 23:14:08
我正在尋找純粹的SQL(MySQL),沒有性能問題,不經常。 – Llynix 2010-01-08 20:28:36