我有2个表“A”和“B”。 两者有一个共同的列“名”,并通过一列“ID”相互连接。 在表A中的列“名”是空的,而它在表B.我的任务是从B表填写该栏所有数据表A与相应的IDS数据。
我使用下面的查询:
UPDATE A
SET A.name = (SELECT B.name from B WHERE A.id = B.id)
WHERE EXISTS
(SELECT B.name from B)
当我运行SQL开发人员的查询,它只是冻结和我必须强制关闭它。 谁能告诉我什么是错的查询?
我有2个表“A”和“B”。 两者有一个共同的列“名”,并通过一列“ID”相互连接。 在表A中的列“名”是空的,而它在表B.我的任务是从B表填写该栏所有数据表A与相应的IDS数据。
我使用下面的查询:
UPDATE A
SET A.name = (SELECT B.name from B WHERE A.id = B.id)
WHERE EXISTS
(SELECT B.name from B)
当我运行SQL开发人员的查询,它只是冻结和我必须强制关闭它。 谁能告诉我什么是错的查询?
试试这个来代替:
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
我不是你是否做超出索引数据的任何改变上述谈话肯定,但你应该包括一个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
子句中的原始查询不会做太大的除了任何检查,看是否有至少一个非NULL值name
中B
。