SQL(和 Javax.Persistence.Query.ExecuteQuery)如何将 UPDATE 与 WHERE-IN 和 AND 一起使用

SQL (and Javax.Persistence.Query.ExecuteQuery) How to use UPDATE with WHERE-IN and AND

我正在尝试创建一个 SQL 语句,将 table 的 "status" 列中的特定行从 'NOT OK' 更新为 'OK',但仅适用于具有提供的 ID 和状态的行。

数据在 table (table1.id, table1.status) = [ID1, PENDING], [ID2, NOT OK], [ ID3,不正常]

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,因为它的状态不是 'NOT OK',但仍将 ID2 和 ID3 的状态更改为 OK。如何修复代码?请注意,由于权限限制,我不允许使用创建 table(即使是临时的)。

我可以打两个 SQL 电话;首先通过 ID select where status = not OK,然后在没有 "WHERE table1.status= 'not OK'" 部分的情况下执行此更新语句,但我尽量避免这样做

评论有点长

您的代码完全按照您指定的方式执行:更新同时满足 statusid 条件的行。 Here 是一个 db<>fiddle 来说明这一点。这个 fiddle 碰巧使用了 Postgres,但这真的无关紧要。该代码在任何数据库中都可以正常工作。

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