SQL查询求助:如何筛选mange表中同时食用两种披萨的用户
解决同时食用两种披萨的用户筛选问题
问题原因
你写的SQL逻辑有误:单条记录的pizza字段只能存储一种披萨类型,不可能同时等于'végétarienne'和'mexicaine',所以用AND直接筛选自然返回空结果。
正确解法
下面提供几种常用的实现方式:
方法1:分组统计 + HAVING子句
通过分组统计每个用户对应的披萨种类数,筛选出同时包含两种披萨的用户:
SELECT nom FROM mange WHERE pizza IN ('végétarienne', 'mexicaine') GROUP BY nom HAVING COUNT(DISTINCT pizza) = 2;
- 先筛选出所有涉及目标两种披萨的记录
- 按
nom分组后,统计每组内不同披萨的数量,等于2即表示该用户同时吃了两种披萨
方法2:自连接
将表与自身连接,匹配同一用户下分别食用两种披萨的记录:
SELECT DISTINCT m1.nom FROM mange m1 JOIN mange m2 ON m1.nom = m2.nom WHERE m1.pizza = 'végétarienne' AND m2.pizza = 'mexicaine';
- 自连接后,
m1存储用户吃素食披萨的记录,m2存储同一用户吃墨西哥披萨的记录 - 使用
DISTINCT避免重复输出同一用户
方法3:EXISTS子查询
先筛选出吃素食披萨的用户,再检查该用户是否存在吃墨西哥披萨的记录:
SELECT DISTINCT nom FROM mange WHERE pizza = 'végétarienne' AND EXISTS ( SELECT 1 FROM mange WHERE nom = mange.nom AND pizza = 'mexicaine' );
- 外层查询先锁定吃素食披萨的用户
- 子查询验证该用户是否有对应墨西哥披萨的消费记录
内容的提问来源于stack exchange,提问作者Panda21
相关产品推荐
相关产品推荐

