我有两个表,UserStatus和User。
UserStatus有两个字段: 用户名,状态
用户有两个字段 用户名,已删除
这是我正在使用的查询
Update users
set deleted = '1'
where username = (select username
from tempDUDPIVOT
where status = 'inactive')
但得到错误:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我尝试了很多变化,但无法弄清楚解决方案......我感觉非常明显。
感谢您的帮助。
感谢。
答案 0 :(得分:3)
Update users set deleted = '1'
where username IN (select username from tempDUDPIVOT where status = 'inactive')
IN
接受要返回的0..inf
值,=
接受1而且只接受1(不是0或42)。
答案 1 :(得分:2)
UPDATE
语法需要标量子查询。使用EXISTS (subquery)
使谓词的参数更接近(即使查询更容易阅读和维护,IMO),例如
UPDATE users
SET deleted = '1'
WHERE EXISTS (
SELECT *
FROM tempDUDPIVOT AS T1
WHERE T1.status = 'inactive'
AND T1.username = users.username
);
如果您的SQL产品支持它,您也可以使用标准SQL MERGE
(尽管请注意谓词的参数在这里更远):
MERGE INTO users
USING (
SELECT username
FROM tempDUDPIVOT
WHERE status = 'inactive'
) AS T1 (username)
ON T1.username = users.username
WHEN MATCHED THEN
UPDATE
SET users.deleted = '1';