我有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);
但它只更新一行......
答案 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_table
和SET
列counter
中的每一行counter
值big_table
记录WHERE
值term
的{{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