PL / SQL Update语句返回多行

时间:2012-04-27 06:26:32

标签: sql sql-update

我正在尝试从表测试更新名称列,并从test2表中的列名2更新,其中两个表中的另外两列必须匹配。

它给出了错误“单行查询返回多行”。

如何返回多行?我是否使用for循环?如果是这样,怎么样?

Update Test  
SET name = (Select name2
            from test2
            where name2.col2 = name.col)
WHERE EXISTS
  ( SELECT name2
    FROM test2
   WHERE name2.col2 = name.col);

2 个答案:

答案 0 :(得分:1)

您的问题是您使用标量子查询来获取一个值来设置名称,但实际上您的标量子查询会找到多个值:

Select name2 from test2 where name2.col2 = name.col;

name2
-----
FRED
JOHN
MARY

这可能意味着您的查询错误。鉴于上面的示例,您希望将test2.name更新为什么?

答案 1 :(得分:0)

这里你要做的是加入表test和test2。

SELECT语句如下所示:

SELECT name, name2
FROM test INNER JOIN test2
      ON test.col = test2.col

(上面的查询中有一个拼写错误,你写的是name2.col = name.col,我假设)。运行此select语句以确保要替换“name”的值位于“name2”列中。

UPDATE语句如下所示:

UPDATE test
SET name = test2.name2
FROM test2
WHERE test2.col = test.col

此UPDATE语句中的WHERE语句充当两个表的JOIN。