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)
);
如果x
和y
没有重复的组合,HAVING
子句可以写得更简单:
HAVING COUNT(*) = (SELECT COUNT(DISTINCT y) FROM tablename)
参见demo。
我有一个涉及 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)
);
如果x
和y
没有重复的组合,HAVING
子句可以写得更简单:
HAVING COUNT(*) = (SELECT COUNT(DISTINCT y) FROM tablename)
参见demo。