【发布时间】: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