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

如何从两张关联表中筛选未关联dental产品的PL表记录

你之前用外连接加PLproducts.productIdentifier <> 'dental'的条件之所以不符合需求,是因为该条件只会过滤单条关联的dental记录,不会把整个存在dental产品的plid全部排除,自然会返回该plid下其他非dental的关联行。

实现方案

方法1:使用NOT EXISTS(推荐,语义清晰、查询性能优)

逻辑和需求完全匹配,直接筛选没有关联任何dental产品的PL记录:

SELECT p.plid, p.plname
FROM PL p
WHERE NOT EXISTS (
    SELECT 1 
    FROM PLproducts pp 
    WHERE pp.plid = p.plid 
      AND pp.productIdentifier = 'dental'
);

方法2:使用LEFT JOIN + 空值判断

将productIdentifier = 'dental'的条件放在JOIN的ON子句中,关联后筛选未匹配到dental产品的PL记录:

SELECT DISTINCT p.plid, p.plname
FROM PL p
LEFT JOIN PLproducts pp 
  ON p.plid = pp.plid 
  AND pp.productIdentifier = 'dental'
WHERE pp.plid IS NULL;

注意:不能把productIdentifier = 'dental'的条件放到WHERE子句中,否则会过滤掉左表的非匹配行,达不到筛选效果。

方法3:使用分组聚合判断

关联两张表后按plid分组,通过聚合条件判断分组内所有产品都不含dental:

SELECT p.plid, p.plname
FROM PL p
JOIN PLproducts pp ON p.plid = pp.plid
GROUP BY p.plid, p.plname
HAVING SUM(CASE WHEN pp.productIdentifier = 'dental' THEN 1 ELSE 0 END) = 0;

如果使用支持布尔聚合的数据库(如PostgreSQL),可简化HAVING条件为HAVING BOOL_AND(pp.productIdentifier <> 'dental')。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:04