gpt4 book ai didi

SQL 与 group by 相交

转载 作者:行者123 更新时间:2023-12-01 11:33:34 27 4
gpt4 key购买 nike

鉴于这两个表/集合具有不同的项目组,我如何找到 set1 中的哪些组跨越 set2 中的多个组? 如何找到 set1 中的组不能被 set2 中的单个组覆盖?

例如对于下表,A (1,2,5) 是唯一跨越 s1(1,2,3) 和 s2(2,3,4,5)。 BC 不是答案,因为它们都包含在单个组 s2 中。

我更愿意使用 SQL(Sql Server 2008 R2 可用)。

谢谢。

set1                            set2
+---------+----------+ +---------+----------+
| group | item | | group | item |
`````````````````````+ `````````````````````+
| A | 1 | | s1 | 1 |
| A | 2 | | s1 | 2 |
| A | 5 | | s1 | 3 |
| B | 4 | | s2 | 2 |
| B | 5 | | s2 | 3 |
| C | 3 | | s2 | 4 |
| C | 5 | | s2 | 5 |
+---------+----------+ +---------+----------+

使用这个 sqlfiddle 试试:http://sqlfiddle.com/#!6/fac8a/3

或者使用下面的脚本生成临时表来尝试答案:

create table #set1 (grp varchar(5),item int)
create table #set2 (grp varchar(5),item int)

insert into #set1 select 'a',1 union select 'a',2 union select 'a',5 union select 'b',4 union select 'b',5 union select 'c',3 union select 'c',5
insert into #set2 select 's1',1 union select 's1',2 union select 's1',3 union select 's2',2 union select 's2',3 union select 's2',4 union select 's2',5

select * from #set1
select * from #set2

--drop table #set1
--drop table #set2

最佳答案

set1 中选择组 set2 中没有组 set1 中的所有项目都存在于 set2 :

select s1.grp from set1 s1
where not exists(
select * from set2 s2 where not exists(
select item from set1 s11
where s11.grp = s1.grp
except
select item from set2 s22
where s22.grp = s2.grp))
group by s1.grp

关于SQL 与 group by 相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29865649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com