0

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

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

如何返回多行?我是否使用 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);
4

2 回答 2

1

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

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

name2
-----
FRED
JOHN
MARY

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

于 2012-04-27T09:34:13.090 回答
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。

于 2012-04-29T18:53:18.550 回答