在UPDATE查询中使用JOIN

时间:2014-02-11 16:24:12

标签: mysql sql

我有2个具有相同结构的表:

| term (varchar(50) utf8_bin) | count (bigint(11)) |

一个表称为“big_table”,另一个表称为“small_table”。大表有~10M行,small_table有75k。

我想更新small_table,因此将从big_table填充count列。 我试过这个:

UPDATE small_table b SET counter = (SELECT c.counter
                                 FROM big_table c
                                 WHERE c.term = b.term)
WHERE term = (SELECT c.term
              FROM big_table c
              WHERE c.term = b.term);

但它只更新一行......

3 个答案:

答案 0 :(得分:3)

我认为你只需要一个JOIN

UPDATE small_table b 
  JOIN big_table c
    ON c.term = b.term
SET b.counter = c.counter ;

答案 1 :(得分:2)

您根本不需要WHERE部分:

UPDATE 
    small_table b 
SET 
    counter = 
        ISNULL
        (
            (
                SELECT c.counter
                FROM big_table c
                WHERE c.term = b.term
            ), 
            0
        )

想一想:

UPDATE small_tableSETcounter中的每一行counterbig_table记录WHEREterm的{​​{1}}等于term中的small_table。如果在big_table中找不到任何内容,则只需将counter设置为0

答案 2 :(得分:0)

我认为以下查询可以帮助您

          UPDATE small_table SET counter = c.counter
          FROM big_table c INNER JOIN small_table b ON c.term = b.term