MySql-使用Select

时间:2018-08-03 08:34:05

标签: mysql sql sql-update subquery

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

Update T_STATO_CASA
  Set  UTENTE = 'Admin'
Where ID_CASA in (
                  Select ID 
                    From T_CASA 
                   Where ID_RICHIESTA 
                      In (437869, 437233, 437235, 437876)
                  )

但是它返回以下错误:“子查询返回了多个值。当子查询跟随时,不允许这样做

  

=,!=,<,<=,>,> =

或将子查询用作表达式时。” 如果我单独运行子查询,它将返回4个结果。我的语法错误吗?谢谢。

编辑:所有使用JOIN的建议解决方案都给我语法错误,好像MySql只期望update-set-where命令序列一样。例如,我不能写类似

的东西
update T_STATO_CASA as x
set [...]
where [...]

因为它给了我语法错误:“ AS字附近的语法不正确。预期设置”

3 个答案:

答案 0 :(得分: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 :(得分: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将结果归为一条记录

答案 2 :(得分: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)

谢谢大家。