jaw*_*101 2 sql t-sql sql-server
table 1
item group_id
123 aaaa
432 bbbb
534 aaaa
765 cccc
656 aaaa
656 cccc
111 cccc
group_id group_name
aaaa groupA
bbbb groupB
cccc groupC
Run Code Online (Sandbox Code Playgroud)
我想找到包含765和656的所有组 - 在这种情况下,GroupC包含这两个值.
有没有办法避免一堆嵌套查询或AND语句?假设表1可以有数千个配对,我必须找到包含所有30个项目列表的组.编写一个非常大的查询来回答这个问题会很难看.
我希望我能说"在(765,656)中的位置",但它的表现不同.如果有一堆物品要匹配就会变得混乱.
SQL小提琴http://sqlfiddle.com/#!9/6581eb/9
示例数据(如果SQL Fiddle由于某种原因无法访问):
create table table1(itemID int,groupID varchar(4));
insert into table1(itemID,groupID)
values
(123,'aaaa')
,(432,'bbbb')
,(534,'aaaa')
,(765,'cccc')
,(656,'aaaa')
,(656,'cccc')
,(111,'cccc');
create table table2(groupID varchar(4),groupName varchar(6));
insert into table2(groupID,groupName)
values
('aaaa','groupA')
,('bbbb','groupB')
,('cccc','groupC');
Run Code Online (Sandbox Code Playgroud)
Zoh*_*led 10
最简单的方法是使用group by和having:
SELECT group_name
FROM table2 g
JOIN table1 t on g.group_id = t.group_id
WHERE t.item in (765,656)
GROUP BY group_name
HAVING COUNT(DISTINCT t.item) = 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |