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

如何编写SQL查询:排除关联特定乐器的所有ID,以及排除instrumentnaam列含saxofoon的stuknr

嘿,这两个SQL需求我太熟了,给你整理了几种高效且易懂的实现方案,你可以根据自己的数据库类型和数据规模来选:

问题1:展示所有ID,排除关联特定乐器的ID

假设我们有主表(比如items,存储核心ID数据)和关联表(比如item_instruments,记录ID与乐器的关联关系),以下是几种靠谱的写法:

  • 方法1:NOT EXISTS(性能最优推荐)
    数据库优化器对NOT EXISTS的支持很好,尤其是当关联字段(比如item_id)有索引时,能快速定位到无匹配的记录:

    SELECT i.id
    FROM items i
    WHERE NOT EXISTS (
        SELECT 1
        FROM item_instruments ii
        WHERE ii.item_id = i.id
          AND ii.instrumentnaam = '你的目标乐器名称' -- 替换成实际要排除的乐器
    );
    
  • 方法2:LEFT JOIN + IS NULL(逻辑直观)
    这种写法新手更容易理解,通过左连接保留主表所有记录,再筛选出关联表无匹配的ID:

    SELECT i.id
    FROM items i
    LEFT JOIN item_instruments ii
      ON i.id = ii.item_id
      AND ii.instrumentnaam = '你的目标乐器名称'
    WHERE ii.item_id IS NULL;
    
  • 方法3:NOT IN(简洁但注意空值陷阱)
    写法最简洁,但要警惕子查询返回的item_id包含NULL的情况——一旦有NULL,NOT IN会导致整个结果为空:

    SELECT id
    FROM items
    WHERE id NOT IN (
        SELECT item_id
        FROM item_instruments
        WHERE instrumentnaam = '你的目标乐器名称'
    );
    
问题2:排除所有在instrumentnaam列中至少存在一条saxofoon记录对应的stuknr

也就是要找出从未关联过saxofoon的stuknr,以下是几种高效实现:

  • 方法1:NOT EXISTS(最优推荐)
    单表场景下用自连接的NOT EXISTS,性能出色,且逻辑清晰:

    SELECT DISTINCT s.stuknr
    FROM your_table s -- 替换成你的实际表名
    WHERE NOT EXISTS (
        SELECT 1
        FROM your_table s2
        WHERE s2.stuknr = s.stuknr
          AND s2.instrumentnaam = 'saxofoon'
    );
    

    注:如果stuknr在表中本身是唯一的,可以去掉DISTINCT。

  • 方法2:GROUP BY + HAVING(适合统计场景)
    通过分组统计每个stuknr下saxofoon的数量,筛选出数量为0的记录,适合需要同时查看其他统计数据的场景:

    SELECT stuknr
    FROM your_table
    GROUP BY stuknr
    HAVING SUM(CASE WHEN instrumentnaam = 'saxofoon' THEN 1 ELSE 0 END) = 0;
    
  • 方法3:LEFT JOIN + IS NULL(逻辑直观)
    同样用左连接的思路,找到无saxofoon匹配的stuknr:

    SELECT DISTINCT s.stuknr
    FROM your_table s
    LEFT JOIN your_table s2
      ON s.stuknr = s2.stuknr
      AND s2.instrumentnaam = 'saxofoon'
    WHERE s2.stuknr IS NULL;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:49:06