我正在尝试生成一个sql语句,将表的“status”列中的特定行从“notok”更新为“ok”,但只针对具有提供的id和status的行。
表中的数据(table1.id,table1.status)=[id1,挂起],[id2,不正常],[id3,不正常]
id列表将从java传递到“in()”部分,我只有id,没有状态数据。请注意,id1的状态不是“notok”。
到目前为止我掌握的密码;
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。如何修复代码?注意:由于权限限制,我不允许使用create表(即使是临时表)。
我可以做两个sql调用;首先选择by id where status=not ok,然后在不使用“where table1.status='not ok'”部分的情况下执行这个update语句,但是如果可能的话,我会尽量避免这样做
1条答案
按热度按时间lyfkaqu11#
这是一个有点长的评论。
您的代码完全执行您指定的操作:更新同时满足上两个条件的行
status
继续id
s。这里有一把小提琴来说明这一点。这个小提琴碰巧用的是postgres,但那真的没关系。该代码在任何数据库中的工作方式都是相同的。我怀疑你在通过考试时有问题
id
这些状态只是一种混乱。您没有提供足够的信息来确定错误所在。但是你的sql代码正在做你想做的事情。