通过在另一表中的列更新一个表中的列(Updating a column in one table t

2019-09-22 03:35发布

我有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开发人员的查询,它只是冻结和我必须强制关闭它。 谁能告诉我什么是错的查询?

Answer 1:

试试这个来代替:

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



Answer 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子句中的原始查询不会做太大的除了任何检查,看是否有至少一个非NULL值nameB



文章来源: Updating a column in one table through a column in another table