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

如何筛选col1不含D值的唯一name?SQL查询问题

筛选col1列无D值的name的正确SQL写法

表结构

idnamecol1
1fooA
2fooC
3barA
4barD

需求

筛选出所有col1列不存在任何D值的name,预期结果为foo。

原语句问题

你执行的SQL存在两个问题:

  1. 字符串值D未加单引号,属于语法错误;
  2. 逻辑错误:WHERE col1 != 'D'只会筛选出单条col1不等于D的记录,再去重name。但bar存在col1为A的记录,会被该语句选中,最终返回foo和bar,不符合“该name所有记录都无D”的要求。

正确解法

方法1:NOT EXISTS子查询

SELECT DISTINCT t.name
FROM table t
WHERE NOT EXISTS (
    SELECT 1
    FROM table
    WHERE name = t.name AND col1 = 'D'
)

核心逻辑:检查当前name是否不存在任何col1为D的关联记录,不存在则保留。

方法2:GROUP BY + HAVING统计

SELECT name
FROM table
GROUP BY name
HAVING COUNT(CASE WHEN col1 = 'D' THEN 1 END) = 0

核心逻辑:按name分组后,统计每个分组中col1为D的记录数,筛选出统计数为0的分组(即该name无D值记录)。

方法3:LEFT JOIN排除法

SELECT DISTINCT t.name
FROM table t
LEFT JOIN table d ON t.name = d.name AND d.col1 = 'D'
WHERE d.name IS NULL

核心逻辑:将表自连接,关联条件是同name且col1为D,筛选出无法关联到的name(即该name没有D值记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:53:01