Here is my problem.
I have two tables like user and customer. Users can be related to some customer(s).
For example, I have a user who relates to two customers, and the other user relates to three customers, etc.
This is my code that creating tables and inserting values;
x
create table tbl_user
(
id int,
username varchar(100),
relatedcustom_id int
)
create table tbl_custom
(
id int,
name varchar(100)
)
insert into tbl_custom values(1,'john'),
(2,'adam'),
(3,'steve'),
(4,'marliyn'),
(5,'coco'),
(6,'George');
insert into tbl_user values (1,'cst_moose',1),
(1,'cst_moose',2),
(2,'cst_moose',3),
(3,'cst_kevin',2),
(4,'cst_kevin',5),
(5,'cst_donald',1),
(6,'cst_donald',2),
(7,'cst_donald',4),
(8,'cst_henry',1),
(9,'cst_henry',6),
(10,'cst_michel',1),
(11,'cst_michel',2);
I want to pull the user name(s) that relates to customers that id is 1 and 2.
Here is my select code;
select username from tbl_user where exists (select 1 from tbl_custom
where
id in(1,2))
except
select username from tbl_user where exists (select 1 from tbl_custom
where
id not in(1,2))
But this query demonstrates nothing.
The other select code ;
select username from tbl_user where relatedcustom_id in (1,2)
except
select username from tbl_user where relatedcustom_id not in (1,2)
This query shows like this;
username
--------
cst_michel
What I want to do is a Select – As – From with the following fields
username
--------
cst_michel
cst_moose
cst_donald
Advertisement
Answer
One of the possible solution is to use arrays:
select username
from tbl_user
where relatedcustom_id in (1,2) -- to filter out unrelated data
group by username
having array[1,2] <@ array_agg(relatedcustom_id);
-- or '{1,2}' <@ array_agg(relatedcustom_id);