我正在尝试从表测试更新名称列,并从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);
答案 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。