sql - SQL检查一对元组是否在不同的表中至少有一个匹配项
问题描述
我有 2 张桌子:member
和purchase
会员可以属于多个俱乐部,购买是通过俱乐部完成的。例如,会员 A 可以属于 3 个俱乐部,可以通过俱乐部 A 购买一件商品,通过俱乐部 B 购买一件商品。
会员和购买都包含会员 ID 和俱乐部名称。
我如何确定会员是否从他们所属的每个俱乐部购买了一件物品(不管有多少)?
编辑:这是一个更大的家庭作业问题的一部分,以查找没有从他们所在的每个俱乐部购买书籍的成员。我的想法是使用 EXCEPT 子句删除从他们所在的每个俱乐部购买书籍的每个人,但我我在这方面有困难。
解决方案
您可以计算会员购买的不同俱乐部的数量,并将其与俱乐部总数进行比较:
SELECT m.*
FROM members m
JOIN (SELECT member_id, COUNT(DISTINCT club_id) AS club_purchases
FROM purchases
GROUP BY member_id) p ON m.member_id = p.member_id
CROSS JOIN (SELECT COUNT(DISTINCT club_id) AS all_clubs
FROM purchases) c
WHERE club_purchases = all_clubs
推荐阅读
- android - Android:解析巨大的JSON文件和搜索优化
- python - 如何对随机生成的请求 url 执行 POST 请求?
- javascript - 如何使用 JS-NaCl 加密 JSON 对象并使用 php Libsodium 解密
- java - 将两个都包含字符的二维数组与java结合起来
- python - pandas 对象(索引、ndarray 等)和数据类型(例如 bool、int、float)之间的区别?
- webgl - 支持 WebGL1 + WebGL2
- python - 将季度卷成一行时的日期间隔
- angular - 如何禁用在输入上方飞行的角度材料占位符
- postgresql - 我无法在 PostgreSQL 11 中删除数据库
- notepad++ - 如何在notepad ++中查找两个字符之间的文本并将其替换为一行的另外两个字符之间的文本?