簡體   English   中英

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 語句,該語句將表的“狀態”列中的特定行從“不正常”更新為“正常”,但僅適用於具有提供的 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 到 select where status = not OK,然后在沒有“WHERE table1.status = 'not OK'”部分的情況下執行此更新語句,但我盡量避免這樣做

這是一個有點長的評論。

您的代碼完全按照您指定的方式執行:更新同時滿足statusid條件的行。 是一個說明這一點的 db<>fiddle。 這個小提琴恰好使用 Postgres,但這並不重要。 該代碼在任何數據庫中的工作方式都相同。

我的懷疑是你在傳遞id時有一個錯誤,狀態只是一個混亂。 您沒有提供足夠的信息來確定錯誤所在。 但是您的 SQL 代碼正在做您想做的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM