sqlite3 从 n:n table 中选择所有 1:n 值

sqlite3 selecting all 1:n values from an n:n table

我有一个涉及 2 个实体的 sqlite table,形式为

x | y
1   1
1   3
2   2
2   3
3   1
3   2
3   3

预期输出:3 (因为 x=3 链接到 y=1,2,3,也就是 y 的所有值)

我需要 select x 中与 y 中的每个值都有关系的所有值 我的问题是,当我按 x 分组时,然后检查给定的一组 x 有多少个 y 值, 我不知道总共有多少个 y 值,因为我只是将 table 按 x 分组,无法访问原始值进行计数。

使用此查询:

SELECT x
FROM tablename
GROUP BY x
HAVING COUNT(DISTINCT y) = (SELECT COUNT(DISTINCT y) FROM tablename);

您可以获得与每个 y.

相关的所有 x

您可以将它与运算符 IN 一起使用以获取 table:

中的所有行
SELECT *
FROM tablename
WHERE x IN (
  SELECT x
  FROM tablename
  GROUP BY x
  HAVING COUNT(DISTINCT y) = (SELECT COUNT(DISTINCT y) FROM tablename) 
);

如果xy没有重复的组合,HAVING子句可以写得更简单:

HAVING COUNT(*) = (SELECT COUNT(DISTINCT y) FROM tablename)

参见demo