为什么只更新某些行会删除列中的其余行?

时间:2014-03-16 06:44:00

标签: sql merge sql-update

我有一个包含100行的表,索引为1-100。我有另一个包含50行的表,索引为1-50。我想获取50行表中的行并更新100行表中相应索引的值:

UPDATE t100 SET text = (SELECT text FROM t50 WHERE t50.id = t100.id)

它可以工作,但它会在100行表中将行51-100转换为NULL。我只想保留那些数据。我究竟做错了什么?

3 个答案:

答案 0 :(得分:2)

您正在更新t100的所有条目,无论t50中是否有相应的条目。你应该做的是:

UPDATE t100 SET text = (SELECT text FROM t50 WHERE t50.id = t100.id)
WHERE t100.id IN (SELECT id FROM t50)

答案 1 :(得分:0)

因为您更新了t100中的每一行。

将以下内容添加到查询末尾

Where t100.id <=50

答案 2 :(得分:0)

像这样加入两个表:

UPDATE t1
SET t1.text = t2.text
FROM t100 AS t1
INNER JOIN t50 AS t2 ON t2.id = t1.id