当我试图从MySQL数据库中的另一个表更新表中的行时,会发生奇怪的数据交换错误
所以我有一个10000行长的数据表。表中的几列只描述了其中一列的信息,这意味着只有一列包含内容,其余的列描述了书籍内容的位置。目前,10000行内容列中只有6000行被其内容填充。第6-10000行的内容列只表示null 我在数据库中有另一个表,它包含6000-10000行的内容,并且有正确的主键,这似乎可以很容易地更新10000行表 我一直在尝试以下更新查询:当我试图从MySQL数据库中的另一个表更新表中的行时,会发生奇怪的数据交换错误,mysql,sql,database,sql-update,Mysql,Sql,Database,Sql Update,所以我有一个10000行长的数据表。表中的几列只描述了其中一列的信息,这意味着只有一列包含内容,其余的列描述了书籍内容的位置。目前,10000行内容列中只有6000行被其内容填充。第6-10000行的内容列只表示null 我在数据库中有另一个表,它包含6000-10000行的内容,并且有正确的主键,这似乎可以很容易地更新10000行表 我一直在尝试以下更新查询: UPDATE table(10,000) SET content_column = (SELECT content FROM tabl
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)
哪种方法有效,唯一的问题是它从第二个表中很好地提取数据,但它用null替换了现有的内容列。因此,第1-6000行的内容列变为null,第6-10000行的内容列具有正确的值……我觉得很奇怪
有人对我的错误有什么想法吗?如果您能给我展示一个更好的sql查询,我将不胜感激!谢谢原因是您没有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)
))