【问题标题】:SQL (and Javax.Persistence.Query.ExecuteQuery) How to use UPDATE with WHERE-IN and ANDSQL(和 Javax.Persistence.Query.ExecuteQuery)如何使用 UPDATE 与 WHERE-IN 和 AND
【发布时间】:2020-05-27 02:42:28
【问题描述】:

我正在尝试创建一条 SQL 语句,将表的“状态”列中的特定行从“不正常”更新为“正常”,但仅适用于具有提供的 ID 和状态的行。

表中的数据 (table1.id, table1.status) = [ID1, PENDING], [ID2, NOT OK], [ID3, NOT OK]

一个ID列表将从java传递到“in()”部分,我只有ID,没有状态数据。请注意 ID1 的状态不是“NOT OK”。

目前为止的代码;

UPDATE table1
SET table1.status = 'OK'
WHERE table1.status = 'NOT OK' AND table1.id in ('ID1', 'ID2', 'ID3')

如果括号内的列表包含所有带有“NOT OK”的 ID,它将对括号内的所有 ID 进行更改。 但如果其中一个 ID 包含不同的状态,则不会进行任何更改。

该语句应忽略 ID1,因为它的状态不是“不正常”,但仍将 ID2 和 ID3 的状态更改为正常。如何修复代码?注意由于权限限制,我不允许使用创建表(即使是临时表)。

我可以进行两次 SQL 调用;首先通过 ID 选择 where status = not OK,然后在没有“WHERE table1.status='not OK'”部分的情况下执行此更新语句,但我尽量避免这样做

【问题讨论】:

  • 这段代码应该按照你的描述做。您还应该使用您正在使用的数据库进行标记。
  • @GordonLinoff 感谢您回复 Gordon,到目前为止,它正在更改 () 中的所有 ID,或者没有。我正在尝试使其能够更改 () 中的 一些 ID
  • 如果 id 1 的状态为 NOT OK 查询运行之前,您如何判断查询确实影响了它?

标签: java sql sql-update where-in javax.persistence


【解决方案1】:

评论有点长。

您的代码完全按照您指定的方式执行:更新同时满足statusids 条件的行。 Here 是一个说明这一点的 dbfiddle。这个小提琴碰巧使用了 Postgres,但这并不重要。该代码在任何数据库中的工作方式都相同。

我怀疑你在传递ids 时有一个错误,状态只是一个混乱。您没有提供足够的信息来确定错误所在。但是你的 SQL 代码正在做你想做的事。

【讨论】:

  • 这是不久前的问题,只是想更新一下这是另一个错误。 SQL很好。感谢您为我指明正确的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
相关资源
最近更新 更多