You need to enable JavaScript to run this app. 已知VALUE列指定取值,MySQL如何查询匹配的相同ID行
优惠活动
大模型
产品
解决方案
定价
更多

已知VALUE列指定取值,MySQL如何查询匹配的相同ID行

问题整理

本人是一名编程初学者,近期遇到了一个数据库查询相关的编程难题:
当前所用数据表的示例记录如下:

IDVALUE
15
14
23
24
33
35

需要检索出同一ID下同时存在VALUE值为3、4的匹配记录,最终期望得到的结果为ID为2的记录,求对应的MySQL查询语句。

解决方案

该需求属于分组下多值同时匹配场景,三种常用实现写法:

  • 写法1:GROUP BY + HAVING (易理解,适合小数据量)
SELECT ID
FROM `替换为实际表名`
WHERE VALUE IN (3, 4)
GROUP BY ID
HAVING COUNT(DISTINCT VALUE) = 2;

逻辑说明:先过滤出VALUE为3或4的行,按ID分组后统计每个ID下不重复的VALUE数量,等于2即同时包含3、4,加DISTINCT可避免重复VALUE干扰计数。

  • 写法2:自连接(性能优,适合大数据量)
SELECT DISTINCT ID
FROM `替换为实际表名` t1
INNER JOIN `替换为实际表名` t2
  ON t1.ID = t2.ID
  AND t1.VALUE = 3
  AND t2.VALUE = 4;

逻辑说明:表自身关联,强制同一ID下同时存在VALUE=3和VALUE=4的行,DISTINCT去重返回结果。

  • 写法3:EXISTS 子查询(扩展性强,可快速叠加多VALUE条件)
SELECT DISTINCT ID
FROM `替换为实际表名` t1
WHERE VALUE = 3
  AND EXISTS (
    SELECT 1 FROM `替换为实际表名` t2
    WHERE t2.ID = t1.ID AND t2.VALUE = 4
  );

逻辑说明:先匹配所有VALUE=3的行,再校验对应ID是否存在VALUE=4的记录,后续如果要加VALUE=5之类的条件,直接叠加AND EXISTS即可。

注意:所有写法中的替换为实际表名需要换成你自己业务里的表名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.10 11:45:04