我需要更新一个带有选择的表。这是我到目前为止的查询:
Update T_STATO_CASA
Set UTENTE = 'Admin'
Where ID_CASA in (
Select ID
From T_CASA
Where ID_RICHIESTA
In (437869, 437233, 437235, 437876)
)
但它返回以下错误:“子查询返回超过 1 个值。当子查询跟随时,这是不允许的
=, !=, <, <= , >, >=
或者当子查询用作表达式时。” 如果我单独运行子查询,它会返回 4 个结果。我的语法错误吗?谢谢。
编辑:所有使用 JOIN 的建议解决方案都会给我语法错误,就好像 MySql 只需要 update-set-where 命令序列一样。例如我不能写类似的东西
update T_STATO_CASA as x
set [...]
where [...]
因为它给了我语法错误:“单词 AS 附近的语法不正确。预期的 SET”
UPDATE t_stato_casa x
JOIN t_casa y
ON y.id = x.id_casa
SET x.utente = 'admin'
WHERE y.id_richiesta IN(437869, 437233, 437235, 437876)
原因是你的子查询会返回多行记录
更合适的方式是用
JOIN
代替
UPDATE T_STATO_CASA
JOIN T_CASA t
ON t.id = ID_CASA
AND t.ID_RICHIESTA
IN (437869, 437233, 437235, 437876)
SET UTENTE = 'Admin
如果还想使用子查询,需要使用
group_concat
将结果变成一条记录
这是适合我的情况的正确语法:
UPDATE t_stato_casa
SET
UTENTE = 'Admin'
FROM
t_stato_casa AS sc
INNER JOIN T_CASA AS c
ON c.ID = sc.ID_CASA
WHERE
c.ID_RICHIESTA in (437869, 437233, 437235, 437876)
谢谢大家。
使用别名,(MySQL)
update T_STATO_CASA as x
set x.UTENTE='Admin'
where x.ID_CASA in (
select ID from T_CASA
where ID_RICHIESTA in (437869, 437233, 437235, 437876)
);
需要正确引用表格。