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

如何编写SQL查询从两个表中筛选符合条件且缺失红色颜色值的记录

正确SQL实现

你原有第一条查询存在逻辑优先级问题:AND 运算优先级高于 OR,原有写法会匹配到「状态为active的Apple」或者「任意状态的Strawberry」,不符合你的筛选要求,调整后可以用以下两种方案实现需求:


方案1:LEFT JOIN 空值匹配(逻辑直观)

SELECT 
  f.code,
  f.fruit,
  'red' AS missingColor
FROM fruit f
LEFT JOIN color c 
  ON f.code = c.code 
  AND c.color = 'red'
WHERE 
  f.status = 'active'
  AND f.fruit IN ('Apple', 'Strawberry')
  AND c.code IS NULL;

逻辑说明:

  • 先从fruit表过滤出符合状态、水果类型要求的记录
  • 左关联color表时直接限定仅匹配颜色为red的记录,若对应code没有red色值,关联出来的color表字段全部为空
  • 最后过滤出关联结果为空的记录就是符合要求的无效记录

方案2:NOT EXISTS 子查询(大表性能更优)

SELECT 
  f.code,
  f.fruit,
  'red' AS missingColor
FROM fruit f
WHERE 
  f.status = 'active'
  AND f.fruit IN ('Apple', 'Strawberry')
  AND NOT EXISTS (
    SELECT 1 FROM color c 
    WHERE c.code = f.code AND c.color = 'red'
  );

逻辑说明:

  • 先过滤fruit表的符合条件的记录
  • 子查询判断对应code在color表中是否存在red色值,不存在就返回当前记录

两种方案返回的结果都和你要求的输出一致,无需额外加GROUP BY或者DISTINCT即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:18:05