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

如何使用IN运算符筛选满足全部指定子条件的spec_main_id记录?

调整SQL查询以筛选符合条件的spec_main_id记录

你的原始查询仅筛选单条记录满足spec_value != '',因此会返回10001中spec_id=11的记录(该条目的spec_value不为空)。但你的实际需求是:仅保留那些spec_main_id下,所有spec_id属于(11,12)的记录的spec_value都不为空的条目,也就是要排除存在任意一个spec_id(11/12)为空的spec_main_id。

以下是两种可行的调整方案:

方案1:子查询筛选合格的spec_main_id

先通过分组+HAVING子句找出所有符合要求的spec_main_id(即该spec_main_id下的11、12号spec_id对应的spec_value都不为空),再基于这些spec_main_id查询具体记录:

select spec_id, spec_value, spec_main_id
from specification_master
where spec_main_id IN (
    -- 筛选出所有spec_id(11,12)对应的spec_value都不为空的spec_main_id
    select spec_main_id
    from specification_master
    where spec_id IN (11,12)
    group by spec_main_id
    -- 统计该spec_main_id下spec_value为空的11/12号记录数,要求为0
    having count(case when spec_value = '' then 1 end) = 0
)
and spec_id IN (11,12)
and spec_value != '';

方案2:使用EXISTS排除不合格的spec_main_id

通过EXISTS子查询,直接排除那些存在spec_id(11/12)且spec_value为空的spec_main_id:

select sm1.spec_id, sm1.spec_value, sm1.spec_main_id
from specification_master sm1
where sm1.spec_main_id IN (10001,10002)
  and sm1.spec_id IN (11,12)
  and sm1.spec_value != ''
  -- 确保当前spec_main_id下没有11/12号spec_id的空值记录
  and not exists (
      select 1
      from specification_master sm2
      where sm2.spec_main_id = sm1.spec_main_id
        and sm2.spec_id IN (11,12)
        and sm2.spec_value = ''
  );

以上两种查询都会返回你期望的结果:

spec_id | spec_value | spec_main_id 
11      | xyz.com    | 10002 
12      | google.com | 10002

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:40:52