当前位置: 首页 > 知识库问答 >
问题:

MySQL更新查询多行

令狐和裕
2023-03-14

我需要更新我的数据库,它是基于locationId的多行软删除

update device d
set d.deleteDate='2016-05-07'
where d.id in (select dtg.deviceId from devicestogroups dtg
               where dtg.groupId in (select g.id from `group` g
                                     where g.locationId ='1'));

当我运行查询时,我得到一个错误:

错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项-

正如我所知,子查询将返回两条记录,因为子查询返回两条记录更新不会发生,但我如何解决这个问题。我试图解决这个问题,但没有成功。

共有3个答案

巢皓君
2023-03-14

试试这个:

update d
set d.deleteDate='2016-05-07'
from device d
inner join devicestogroups dtg on d.id=dtg.deviceId
inner join `group` g on g.id =dtg.groupId
where g.locationId ='1'
太叔烨霖
2023-03-14

试试这个:

update device set deleteDate='2016-05-07' 
where id in (select dtg.deviceId from devicestogroups dtg where dtg.groupId in ( select g.id from `group` g where g.locationId ='1'));

如果执行更新时不使用列上的别名来更新

李博达
2023-03-14

尝试此操作,最好使用join而不是IN中的子查询:

UPDATE device d
INNER JOIN devicestogroups dtg ON dtg.deviceId = d.id
INNER JOIN `group` g ON g.id = dtg.groupId
    AND g.locationId ='1'
SET d.deleteDate='2016-05-07'

UPDATE device d
INNER JOIN devicestogroups dtg ON dtg.deviceId = d.id
INNER JOIN `group` g ON g.id = dtg.groupId
SET d.deleteDate='2016-05-07'
WHERE g.locationId ='1'
 类似资料:
  • 我需要根据一个子查询的结果更新一个表,该子查询带来了1个以上的值,但在下面的查询中,我得到错误返回“subquery returns mouth 1 row”。我想知道是否有可能做一个“循环”,以更新值与我下面的子查询中呈现的每个结果。 完成查询 返回2个或更多值的子查询。 结果 在理想的场景中,我的查询将执行第一个值,在第二个之后...第三个之后...而不重复前面的值。

  • 问题内容: 谁能帮助我了解为什么此更新查询未更新数据库中的字段?我在我的php页面中有这个来从数据库中检索当前值: 这是我的HTML表单: 这是我的“ editblogscript”: 我不明白为什么它不起作用。 问题答案: 您必须在查询中的所有VARCHAR内容周围加上单引号。因此,您的更新查询应为: 同样,用POST中的内容直接更新数据库是一种不好的形式。您应该使用mysql_real_esc

  • 问题内容: 谁能看到以下查询出了什么问题? 当我运行它时,我得到: #1064-您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第8行的’a where a.CompetitionID = Competition.CompetitionID’附近使用 问题答案: 主要问题是内部查询不能与外部语句上的子句相关,因为在内部子查询执行之前,where过滤器首先应用于要

  • 我正在尝试使用query-更新行(删除列str_column中的连字符和连字符后的所有字符)- 但上面的查询是删除匹配的行而不是更新。 我不明白,如何更新查询可以删除行??

  • 问题内容: 这种类型的东西之前已经被问过几次了,但并不是我要找的东西。我需要两行等于子查询的不同部分。 我目前正在使用: WHERE语句显然得到了简化……但是基本上它是相同的子查询,但是我不认为我应该运行两次? 我想做类似… 问题答案: 您只需将表加入子查询中即可进行一些计算,

  • 问题内容: 我试图用PDO编写更新查询,但我无法执行代码? 问题答案: 您的语法错误 您可能打算更新一行而不是全部更新,因此您必须使用子句来定位特定行 更改 至