Можно ли вернуть пропущенное значение запроса WHERE IN? - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу сделать некоторые проверки данных. У меня есть sender_id и receive_id. Я хочу подтвердить, что каждый идентификатор, который я получаю, действителен. Я пытаюсь избежать зацикливания возвращаемого запроса и списка, который я сравниваю.

У меня есть таблица пользователей с основным столбцом идентификатора, именем и т. Д.

Когда сообщениеЯ послал, чтобы получить идентификаторы отправителя и получателя, превратить их в массив и затем запросить базу данных следующим образом:

SELECT id FROM users WHERE id IN (1, 999);

В моем тестовом примере я знаю, что id 999 не существует.

То, что я хотел бы сделать, это сделать запрос IN (или запрос, который делает это возможным) и заставить его вернуть 999 вместо 1 - или ничего, если оба существуют. Это возможно?

Ответы [ 2 ]

4 голосов
/ 04 ноября 2019

Вместо этого используйте предложение VALUES:

select *
from (values(1),(999)) my_ids(my_id)
where my_id not in (select id from users)
order by my_id;

Демонстрация: https://dbfiddle.uk/?rdbms=postgres_8.4&fiddle=e0d88e36be9c42addf6a0c6357558bf7

1 голос
/ 04 ноября 2019

Как насчет:

select 999
from users
where id = 1;

Возвращается 999, если пользователь существует. Если нет, то результата не будет.

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