将文本从一个表插入另一个表

时间:2012-04-06 16:43:06

标签: mysql sql

我很确定我做得对,但我的查询现在已经在普通笔记本电脑上的MySQL数据库上运行了半个小时。 “tweets”表只有100万条记录。

我想要什么?考虑表“AAA”(左)和“BBB”(右)

id_str  text    id_str  text
------------    -------------------
13              13      foo bar baz
14              14      foobar
                13      foo bar baz
                17      foobaz

我想用表B中的文字填写表A的“文本”列:

UPDATE AAA
SET `text` = (
    SELECT `text` AS `text`
    FROM BBB
    WHERE id_str = AAA.id_str
    LIMIT 1
)

因此表AAA看起来像

id_str  text
-------------------
13      foo bar baz
14      foobar

但是,如上所述,此查询运行时间太长。我的语法错了吗?

2 个答案:

答案 0 :(得分:1)

UPDATE AAA, BBB
SET AAA.`text` = BBB.text
WHERE BBB.id_str = AAA.id_str

答案 1 :(得分:1)

如果我理解你的情况,这应该快得多:

UPDATE `AAA`,`BBB` SET `AAA`.`text`=`BBB`.`text`
WHERE `AAA`.`id_str`=`BBB`.`id_str`

您只需运行此查询一次。它可能仍需要几分钟,但这样做(使用JOIN)仍然可能比运行100万个单独查询要快得多。

AAAid_strBBBid_str都应该被编入索引,并且最好是相同的数据类型,例如两者都应该是int(11)。这允许MySQL以最高效率评估它们之间的相等关系。

编辑:正如我所说,上面提到的查询可能还需要一些时间,具体取决于您的系统配置和硬件(操作可能受磁盘限制,即受硬盘速度的限制)。也可能是因为MySQL必须更新表AAA中的索引 - 您能否向我们展示表CREATE TABLE的{​​{1}}语句?或者,你可以试试这个:

AAA

但是,这不会复制旧表CREATE TABLE `CCC` LIKE `AAA`; INSERT INTO `CCC` SELECT `AAA`.`str_id`,`BBB`.`text` FROM `AAA` JOIN `BBB` ON `AAA`.`id` = `BBB`.`id`; 中的任何数据。