是否存在SQL语句将多个记录匹配到另一个表中的多个记录的完全匹配?
让我们说我有表A
ID | List# | Item
1 | 5 | A
2 | 5 | C
3 | 5 | B
4 | 6 | A
5 | 6 | D
*我故意使“ ABC”项目乱序,因为我收到的记录的顺序可能乱序。
Table B
ID | Group | Item
1 | AAA | A
2 | AAA | B
3 | AAA | C
4 | AAA | D
5 | BBB | A
6 | BBB | B
7 | BBB | C
8 | DDD | A
如果查看第一个表,我希望List#5仅针对组“ BBB”返回匹配项,因为所有(且仅)三个记录都匹配。
答案 0 :(得分:0)
最简单的方法是将其聚合为字符串或数组和join
。标准SQL支持listagg()
,因此您可以执行以下操作:
select a.list, b.list, a.items
from (select a.list, listagg(item, ',') within group (order by item) as items
from a
group by a.list
) a join
(select b.list, listagg(item, ',') within group (order by item) as items
from b
group by b.list
) b
on a.items = b.items;
并非所有数据库都支持listagg()
。许多(但不是全部)具有相似的功能。这比“标准” SQL方法更简单。
答案 1 :(得分:0)
您可以模拟数据库划分。这有点麻烦,但是在这里:
with
x as (
select
from a
where a.list = 5
),
y as (
select grp, count(*) as cnt
from b
join x on x.item = b.item
group by grp
)
select grp
from y
where cnt = (select count(*) from x)