MFD*_*000 4 sql database postgresql relational-division
我确信这个问题有一个答案,但我不喜欢我,因为我是SQL新手,不知道如何提问.
我有这样的数据(这只是简单的简写).这是一个postgres数据库.
table1
id value
1 111
1 112
1 113
2 111
2 112
2 116
3 111
3 122
3 123
4 126
5 123
5 125
6 111
6 112
6 116
table2
value
111
112
116
Run Code Online (Sandbox Code Playgroud)
我需要返回table1的id,其中table2中的所有值都存在于table1的值中.因此,对于此示例,我的查询将返回2和6.
在SQL中有什么办法吗?或者你可以引导我到一个允许我得到这个结果的数据结构吗?我可以更改任一表的结构,以满足获得此结果的最终需要
非常感谢.对此的答案是节省生命.
考虑这个演示:
CREATE TEMP TABLE table1(id int, value int);
INSERT INTO table1 VALUES
(1,111),(1,112),(1,113)
,(2,111),(2,112),(2,116)
,(3,111),(3,122),(3,123)
,(4,126)
,(5,123),(5,125)
,(6,111),(6,112),(6,116);
CREATE TEMP TABLE table2(value int);
INSERT INTO table2 VALUES
(111)
,(112)
,(116);
SELECT t1.id
FROM table1 t1
JOIN table2 t2 USING (value)
GROUP BY t1.id
HAVING count(*) = (SELECT count(*) FROM table2)
ORDER BY t1.id;
Run Code Online (Sandbox Code Playgroud)
结果:
id
-----
2
6
Run Code Online (Sandbox Code Playgroud)
返回所有table1
出现的ID,其中包含table2
一次提供的所有值.
适用于两个表中的任意数量的行.
如果重复的行可以出现在table1
:
HAVING count(DISTINCT value) = (SELECT count(*) FROM table2)
Run Code Online (Sandbox Code Playgroud)