Search code examples
sqlsap-iq

SQL - ALL, Including all values


I have two tables:

create table xyz
(campaign_id varchar(10)
,account_number varchar)

Insert into xyz
values ( 'A', '1'), ('A', '5'), ('A', '7'), ('A', '9'), ('A', '10'),
       ( 'B', '2'), ('B', '3'),
       ( 'C', '1'), ('C', '2'), ('C', '3'), ('C', '5'), ('C', '13'), ('C', '15'),
       ('D', '2'), ('D', '9'), ('D', '10')


create table abc
(account_number varchar)

insert into abc
values ('1'), ('2'), ('3'), ('5')

Now, I want to write a query where all the four account_number 1, 2, 3, 5 are included in a Campaign_id.

The answer is C.

[My aim is to find the Campaign Code that includes account_number 1, 2, 3 & 5. This condition is only satisfied by campaign code C.]

I tried using IN and ALL, but don't work. Could you please help.


Solution

  • I think what you are after is a inner join. Not sure from your questions which way around you want your data. However this should give you a good clue how to procede and what keywords to lock for in the documentation to go further.

    SELECT a.*
    FROM xyz a
    INNER JOIN abc b ON b.account_number = a.account_number;
    

    EDIT:

    Seems I misunderstood the original question.. sorry. To get what you want you can just do:

    SELECT  campaign_id
    FROM    xyz 
    WHERE   account_number IN ('1', '2', '3', '5')
    GROUP BY campaign_id
    HAVING  COUNT(DISTINCT account_number) = 4;
    

    This is called relational division if you want to investigate further.