MySql - 使用 Select 更新

问题描述 投票:0回答:4

我需要更新一个带有选择的表。这是我到目前为止的查询:

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”

mysql sql sql-update subquery
4个回答
2
投票
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)

1
投票

原因是你的子查询会返回多行记录

更合适的方式是用

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
将结果变成一条记录


0
投票

这是适合我的情况的正确语法:

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)

谢谢大家。


0
投票

使用别名,(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)
);

需要正确引用表格。

© www.soinside.com 2019 - 2024. All rights reserved.