所以我有一个10,000行长的数据表。表中的几列简单地描述了其中一列的信息,这意味着只有一列包含内容,其余的列描述了内容的位置(它用于一本书)。现在,10,000行的内容列中只有6,000行填充了它的内容。第6-10,000行的内容列显示为null。
我在db中有另一个表,它包含6,000-10,000行的内容,具有正确的对应主键,这(似乎)使更新10,000行表变得容易。
我一直在尝试更新查询,如下所示:
UPDATE table(10,000)
SET content_column = (SELECT content FROM table(6,000-10,000) WHERE table(10,000).id = table(6-10,000.id)
唯一的问题是它可以很好地从第二个表中拉入数据,但它会将现有的content列替换为null。因此,第1-6,000行的content列变为null,而第6-10,000行的content列具有正确的values...Pretty,我认为这很奇怪。
有没有人对我的错误有什么想法?如果你能给我展示一个更好的sql查询,我将不胜感激!谢谢
发布于 2010-05-15 23:58:23
原因是您没有Where子句,所以所有行都被更新。以下查询将仅更新6K-10K表中存在的拖放,但仍将覆盖匹配值。
Update table(10,000)
Set content_column = (
Select content
From table(6,000-10,000)
Where table(10,000).id = table(6-10,000.id)
)
Where Exists (
Select 1
From table(6,000-10,000)
Where table(10,000).id = table(6-10,000.id)
)
另一种方法是,如果你不想覆盖现有的值,可以使用Coalesce:
Update table(10,000)
Set content_column = Coalesce(table(10,000).content_column
, (
Select content
From table(6,000-10,000)
Where table(10,000).id = table(6-10,000.id)
))
https://stackoverflow.com/questions/2840530
复制相似问题