我有两个表,一个存储customer id,另一个存储customer id以及使用该customer信息的不同来源的信息。示例:表a
Customer Id
1
2
3
..
表b
Customer Id Source
1 'AA'
2 'AA'
1 'AB'
2 'AB'
2 'AC'
3 'AA'
3 'AB'
3 'AE'
4 'AA'
4 'AB'
我想写一个sql查询,它返回只有aa和ab作为源的记录(没有其他源)
我已经编写了以下查询,但无法正常工作:
select a.customer_id
from A a, B b
where a.customer_id = b.customer_id
and b.source IN ('AA','AB')
group by a.customer_id
having count(*) = 2;
3条答案
按热度按时间g0czyy6m1#
一个相当有效的解决方案是
exists
子查询:带索引的
b(customer_id, source)
,这应该运行得很快。另一种选择是侵害:
8wtpewkr2#
这假设customer\u id/源组合没有重复项
在联接之前进行聚合可能更有效:
6vl6ewon3#
可以使用聚合:
也就是说,你的版本应该可以用。然而,你应该学会使用适当的,明确的,标准的,可读的
JOIN
语法。但是,在这种情况下不需要连接。如果只需要这两个源,则需要调整逻辑: