Для примера таблицы acts
ниже:
и запрос ниже:
select request_id, id
from acts
where id in (234,531,876)
Мне нужно получить следующий результат:
Как вы могли видеть, нет строки, в которой существует request_id 876. В этих случаях null
следует вернуть.
Как я мог этого добиться?
Существуют ли эти request_ids в другой таблице, например request
?
Вы имели в виду ... where request_id in (234, 5331, 876)
?
В этой ситуации может помочь условная логика.
for (Object item : database) {
if (item.getId() == id) {
return item;
}
}
return null;
Предполагая, что вы действительно хотели присоединиться к request_id
, а не id
.
create table acts (id integer, request_id integer);
insert into acts values (1, 234), (2, 531);
select
*
from
(values(234), (531), (876)) as t(r_id)
left join
acts on t.r_id = acts.request_id;
r_id | id | request_id
------+------+------------
234 | 1 | 234
531 | 2 | 531
876 | NULL | NULL
Вышеупомянутое создает список ЦЕННОСТИ, который вы можете затем LEFT JOIN
до acts
. В этом случае request_id
, отсутствующий в acts
, будет отображаться со значениями NULL
для соответствующего поля в acts
.
Это произвольные числа. Вы, конечно, могли бы написать такой запрос, но завтра может оказаться, что вам понадобятся 235 532 и 877 вместо 234, 531 и 875. Что движет этим запросом? Действительно ли это именно три значения констант для идентификаторов, которые вы хотите жестко закодировать в своем запросе?