You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL分组查询中如何用多AND条件/IN筛选符合组合条件的记录

解决方法:筛选同时满足多条件的user_id和doctor_id组合

先分析你之前SQL的问题:

  • 第一条SQL用AND同时限定question_id=11和question_id=12,同一行数据不可能同时满足两个不同的question_id,因此永远查不到结果。
  • 第二条SQL用IN是匹配任一条件,分组后会包含只满足其中一个条件的组合,而且第二个条件里的answer值写错了,应该是'["Below 30"]'而非'Below 30'。

正确的SQL写法

方法1:分组+COUNT筛选(通用型强)

适合需要同时满足多个条件的场景,逻辑清晰:

SELECT user_id, doctor_id
FROM doctor_classification_question_answers
WHERE 
    (question_id = 11 AND answer = '["Male"]') 
    OR 
    (question_id = 12 AND answer = '["Below 30"]')
GROUP BY user_id, doctor_id
HAVING COUNT(DISTINCT question_id) = 2;
  • 先筛选出满足两个条件之一的所有行
  • 按user_id和doctor_id分组,HAVING COUNT(DISTINCT question_id)=2确保该组合同时存在两个不同的question_id记录,即同时满足两个条件。

方法2:自连接(适合需要关联更多字段的场景)

SELECT a.user_id, a.doctor_id
FROM doctor_classification_question_answers a
JOIN doctor_classification_question_answers b
    ON a.user_id = b.user_id 
    AND a.doctor_id = b.doctor_id
WHERE 
    a.question_id = 11 AND a.answer = '["Male"]'
    AND 
    b.question_id = 12 AND b.answer = '["Below 30"]';
  • 通过自连接,把满足第一个条件的表a和满足第二个条件的表b关联,直接得到同时符合两个条件的组合。

多条件组合的通用方案

如果要同时满足3个或更多问题的指定回答,可采用以下思路:

  • 扩展分组+COUNT方式:把所有条件放到WHERE的OR分支里,HAVING后的COUNT值等于条件的总数量(比如3个条件就写COUNT(DISTINCT question_id)=3)。
  • 多次自连接:每增加一个条件就多做一次自连接,每个连接的表对应一个独立条件。

内容的提问来源于stack exchange,提问作者Devsi Odedra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:22:04