首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我尝试从MySQL数据库中的另一个表更新表中的行时,发生奇怪的数据交换错误

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

Stack Overflow用户
提问于 2010-05-15 22:55:53
回答 1查看 100关注 0票数 0

所以我有一个10,000行长的数据表。表中的几列简单地描述了其中一列的信息,这意味着只有一列包含内容,其余的列描述了内容的位置(它用于一本书)。现在,10,000行的内容列中只有6,000行填充了它的内容。第6-10,000行的内容列显示为null。

我在db中有另一个表,它包含6,000-10,000行的内容,具有正确的对应主键,这(似乎)使更新10,000行表变得容易。

我一直在尝试更新查询,如下所示:

代码语言:javascript
运行
复制
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查询,我将不胜感激!谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-15 23:58:23

原因是您没有Where子句,所以所有行都被更新。以下查询将仅更新6K-10K表中存在的拖放,但仍将覆盖匹配值。

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
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)
                                ))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2840530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档