通过表替换SQL

时间:2010-01-07 20:58:27

标签: mysql sql text replace

我有一张表A,其中有一列满句子。

我有另一张表B,其中有两列:单词和缩写。

我想查看表A的列句,如果表B的单词列匹配,则将其替换为缩写。

希望很清楚。

案件没关系,我可以处理。假设一切都是低或高或等等。

3 个答案:

答案 0 :(得分:1)

单独使用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 + ")")

这是在对每个句子中的每个单词进行查询,不建议用于性能危急情况,但它可以完成这项工作。

答案 1 :(得分:0)

我知道这是一个老问题,但由于没有答案,我会尝试一下:

SQL Fiddle

MySQL 5.5.32架构设置

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

<强> Results

| ID |                  SENTENCE |
|----|---------------------------|
|  1 | Mr. John is going to L.A. |

答案 2 :(得分:-1)

你可能会疯狂并在excel中添加一个mysql odbc连接。查询一个查询表中的句子,查询另一个表中的查找单词,并编写一个刷新表然后执行查找和替换的小宏,然后将其重新导入到表中。我知道在Ms sql中,你可以在DTS / SSIS中自动完成所有这些操作。