0

我正在尝试创建一个 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'”部分的情况下执行此更新语句,但如果可能,我会尽量避免这样做

4

1 回答 1

1

这是一个有点长的评论。

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

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

于 2020-05-27T02:56:06.267 回答