0

我有两张桌子:

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')

现在,我想编写一个查询,其中所有四个 account_number1, 2, 3, 5都包含在Campaign_id.

答案是C。

[我的目标是找到包含 account_number 1、2、3 和 5 的广告系列代码。此条件仅由广告系列代码 C 满足。]

我尝试使用INand ALL,但不工作。能否请你帮忙。

4

3 回答 3

1

我认为您所追求的是内部连接。从你的问题中不确定你想要你的数据。但是,这应该为您提供一个很好的线索,如何继续以及在文档中锁定哪些关键字以更进一步。

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

编辑:

似乎我误解了原来的问题..对不起。要得到你想要的,你可以这样做:

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

如果您想进一步调查,这称为关系划分。

于 2014-05-01T01:16:42.973 回答
1
SELECT campaign_id
FROM (
    SELECT campaign_id, COUNT(*) AS c, total_accounts
    FROM xyz
    JOIN abc ON xyz.account_number = abc.account_number
    CROSS JOIN (SELECT COUNT(*) AS total_accounts
                FROM abc) AS x
    GROUP BY campaign_id
    HAVING c = total_accounts) AS subq

演示

于 2014-05-01T01:17:16.550 回答
0
select xyz.campaign_id
from xyz
join abc
on xyz.account_number = abc.account_number
group by xyz.campaign_id
having count(xyz.campaign_id) = 
(select count(account_number) from abc);

注意:t-sql 实现

于 2014-05-01T01:37:25.183 回答