首页 > 解决方案 > SQL检查一对元组是否在不同的表中至少有一个匹配项

问题描述

我有 2 张桌子:memberpurchase

会员可以属于多个俱乐部,购买是通过俱乐部完成的。例如,会员 A 可以属于 3 个俱乐部,可以通过俱乐部 A 购买一件商品,通过俱乐部 B 购买一件商品。

会员和购买都包含会员 ID 和俱乐部名称。

我如何确定会员是否从他们所属的每个俱乐部购买了一件物品(不管有多少)?

编辑:这是一个更大的家庭作业问题的一部分,以查找没有从他们所在的每个俱乐部购买书籍的成员。我的想法是使用 EXCEPT 子句删除从他们所在的每个俱乐部购买书籍的每个人,但我我在这方面有困难。

标签: sqldb2

解决方案


您可以计算会员购买的不同俱乐部的数量,并将其与俱乐部总数进行比较:

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

推荐阅读