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

SQL查询:如何筛选仅含指定属性值、无其他值的对应ID

SQL筛选仅关联属性为'a'的id实现方案

测试数据

已知测试表(表名可替换为实际业务表名)数据如下:

idattribute
1a
1a
1b
2a
2a
3c
4a

筛选规则:返回所有关联行中attribute列仅存在值'a'、无其他值的id,预期结果为2、4。

  • id=1不符合:同时存在a、b两种属性值
  • id=3不符合:仅存在属性值c,无a
  • id=2、4符合:所有关联行attribute全为a,无其他值

可用SQL写法

写法1:分组聚合判断(全数据库兼容)

按id分组后,同时满足「组内存在a」「组内无非a值」两个条件即可,适配MySQL、PostgreSQL、SQL Server、Oracle等所有主流关系型数据库:

SELECT id
FROM test_attr
GROUP BY id
HAVING SUM(CASE WHEN attribute = 'a' THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN attribute <> 'a' THEN 1 ELSE 0 END) = 0;

如果是MySQL等支持布尔值直接作为数值计算的数据库,可以简化写法:

SELECT id
FROM test_attr
GROUP BY id
HAVING SUM(attribute = 'a') > 0
   AND SUM(attribute <> 'a') = 0;

写法2:去重值判断

按id分组后,组内去重的属性值只有1个且值为'a',逻辑更简洁:

SELECT id
FROM test_attr
GROUP BY id
HAVING COUNT(DISTINCT attribute) = 1
   AND MAX(attribute) = 'a';

写法3:NOT EXISTS反查(语义最直观)

直接筛选不存在任何非a属性记录的id,适合后续扩展多条件筛选的场景:

SELECT DISTINCT id
FROM test_attr t1
WHERE NOT EXISTS (
    SELECT 1
    FROM test_attr t2
    WHERE t2.id = t1.id
      AND t2.attribute <> 'a'
);

注意:如果attribute字段允许为NULL,需要将判断条件中的t2.attribute <> 'a'修改为(t2.attribute <> 'a' OR t2.attribute IS NULL),避免NULL值三值逻辑导致判断失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:15:38