当我试图从MySQL数据库中的另一个表更新表中的行时,会发生奇怪的数据交换错误

当我试图从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

所以我有一个10000行长的数据表。表中的几列只描述了其中一列的信息,这意味着只有一列包含内容,其余的列描述了书籍内容的位置。目前,10000行内容列中只有6000行被其内容填充。第6-10000行的内容列只表示null

我在数据库中有另一个表,它包含6000-10000行的内容,并且有正确的主键,这似乎可以很容易地更新10000行表

我一直在尝试以下更新查询:

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)
                                ))