SQL选择子集所在的所有行

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中有什么办法吗?或者你可以引导我到一个允许我得到这个结果的数据结构吗?我可以更改任一表的结构,以满足获得此结果的最终需要

非常感谢.对此的答案是节省生命.

Erw*_*ter 6

考虑这个演示:

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)