SQL (и Javax.Persistence.Query.ExecuteQuery) Как использовать UPDATE с WHERE-IN и AND - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь сделать оператор SQL, который обновляет указанные c строки в столбце «status» таблицы с «НЕ ОК» на «ОК», но только для строк с предоставленным идентификатором и статусом.

Данные в таблице (table1.id, table1.status) = [ID1, PENDING], [ID2, NOT OK], [ID3, NOT OK]

A список идентификаторов будет передан из java в часть «in ()», у меня есть только идентификатор и нет данных о состоянии. Обратите внимание, что статус ID1 не является «НЕ ОК».

Код, который у меня есть до сих пор;

UPDATE table1
SET table1.status = 'OK'
WHERE table1.status = 'NOT OK' AND table1.id in ('ID1', 'ID2', 'ID3')

Если список внутри скобок содержит все идентификаторы с «НЕ ОК», это Внесу изменения во все идентификаторы в скобках. Но если один из идентификаторов содержит другой статус, он не будет вносить никаких изменений.

Оператор должен игнорировать ID1, потому что его статус не «НЕ ОК», но все же изменит статус на OK для ID2 и ID3. Как исправить код? Примечание. Мне не разрешено использовать Create a table (даже временные) из-за ограничений привилегий.

Я мог бы сделать два SQL вызова; сначала выбрать по идентификатору, где status = not OK, затем, во-вторых, выполнить этот оператор обновления без части «WHERE table1.status = 'not OK'», но я стараюсь этого не делать, если возможно

1 Ответ

0 голосов
/ 27 мая 2020

Это немного длинновато для комментария.

Ваш код делает именно то, что вы указываете: обновляет строки, которые удовлетворяют как условию на status, так и на id s. Здесь - скрипт db <>, который это иллюстрирует. Эта скрипка использует Postgres, но на самом деле это не имеет значения. Код будет работать одинаково в любой базе данных.

Я подозреваю, что у вас есть ошибка при передаче id статусов, просто путаница. Вы не предоставили достаточно информации, чтобы определить, в чем заключается ошибка. Но ваш код SQL делает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...