4

我有 2 个表“A”和“B”。两者都有一个共同的列“名称”,并通过列“id”相互链接。表 A 中的“名称”列是空的,而表 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 开发人员中运行查询,它就会冻结,我必须强制关闭它。谁能告诉我查询有什么问题?

4

2 回答 2

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 Fiddle,您可以使用它:http ://sqlfiddle.com/#!4/a5ad0/3

于 2012-09-04T16:06:22.560 回答
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子句除了检查是否至少有一个 in 的非 NULL 值外,不会做任何name事情B

于 2012-09-07T12:55:20.760 回答