For the example table acts below:
| id | request_id |
|---|---|
| 1 | 234 |
| 2 | 531 |
and the query below:
select request_id, id
from acts
where id in (234,531,876)
I need to get the following result:
| request_id | id |
|---|---|
| 234 | 1 |
| 531 | 2 |
| 876 | null |
As you could see there is not row where request_id 876 exists. For these cases null should be returned.
How could I achieve this?
>Solution :
Assuming you actually meant to join on request_id not 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
The above creates a VALUES list that you can then LEFT JOIN to acts. In that case the request_id missing in acts will show up with NULL values for the corresponding field in acts.