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

如何查询PACKLIST表中含COLLID 'COL001'且不含'COL200'的PLANNAME

问题原因

你之前写的WHERE COLLID = 'COL001' AND COLLID != 'COL200'只能过滤单条行的COLLID值,无法判断同一个PLANNAME下的所有关联COLLID情况:这条语句只会把所有值为COL001的行筛出来,但只要某个PLANNAME同时有COL001和COL200两条记录,还是会出现在结果里,不符合你的需求。


推荐写法

方法1:使用EXISTS + NOT EXISTS(兼容性最好,逻辑清晰,查询效率高)

SELECT DISTINCT PLANNAME
FROM PACKLIST p1
WHERE EXISTS (
    SELECT 1 FROM PACKLIST p2 
    WHERE p2.PLANNAME = p1.PLANNAME AND p2.COLLID = 'COL001'
)
AND NOT EXISTS (
    SELECT 1 FROM PACKLIST p3 
    WHERE p3.PLANNAME = p1.PLANNAME AND p3.COLLID = 'COL200'
);

方法2:使用分组聚合判断(适合需要同时统计其他关联指标的场景)

SELECT PLANNAME
FROM PACKLIST
GROUP BY PLANNAME
HAVING 
  SUM(CASE WHEN COLLID = 'COL001' THEN 1 ELSE 0 END) > 0
  AND SUM(CASE WHEN COLLID = 'COL200' THEN 1 ELSE 0 END) = 0;

如果你的数据库支持BOOL_OR这类聚合函数,写法可以更简化:

SELECT PLANNAME
FROM PACKLIST
GROUP BY PLANNAME
HAVING 
  BOOL_OR(COLLID = 'COL001') = TRUE
  AND BOOL_OR(COLLID = 'COL200') = FALSE;

效果说明

两种写法都可以保证返回的PLANNAME同时满足:

  • 至少有一条关联记录的COLLID为COL001
  • 没有任何关联记录的COLLID为COL200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:12:03