通过另一个表中的列更新一个表中的列

时间:2012-09-04 16:03:58

标签: sql oracle oracle10g sql-update tablecolumn

我有2张桌子'A'和'B'。两者都有一个共同的列'name',并通过列'id'相互链接。表A中的列'name'是空的,而它有表B中的数据。我的任务是将表B中该列中的所有数据填充到表A中,并带有相应的ID。

我正在使用以下查询:

UPDATE A
SET A.name = (SELECT B.name from B WHERE A.id = B.id)
WHERE EXISTS
(SELECT B.name from B)

一旦我在SQL开发人员中运行查询,它就会冻结,我必须强行关闭它。谁能告诉我查询有什么问题?

2 个答案:

答案 0 :(得分:6)

试试这个:

UPDATE A
SET A.name = (SELECT B.name FROM B WHERE B.id = A.id AND B.name IS NOT NULL)
WHERE a.name IS NULL;

由于您使用的是Oracle,因此这里是IS NOT NULL的参考。

这是SQL小提琴,您可以使用它:http://sqlfiddle.com/#!4/a5ad0/3

答案 1 :(得分:2)

我不确定上述对话中是否对索引数据做了任何更改,但是您应该包含所提到的WHERE EXISTS子句。完整查询应如下所示:

UPDATE A
   SET A.name = ( SELECT B.name FROM B WHERE B.id = A.id )
 WHERE EXISTS ( SELECT 1 FROM B WHERE B.id = A.id )

原始查询中的WHERE EXISTS子句不会执行任何操作,除非检查name中是否至少有一个非{NULL}值为B