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

SQL实现仅当code为1和2的两条记录均存在时返回查询结果的方法

正确实现方案

你要的逻辑是仅当code=1和code=2两条记录同时存在时,才返回这两条数据,否则返回空结果,可以用以下几种方式实现:

方案1:双exists直接判断(最简单,适合固定2个code的场景)

SELECT * 
FROM your_table a 
WHERE a.code IN (1, 2)
-- 同时校验两个目标code都在表中存在
AND EXISTS (SELECT 1 FROM your_table WHERE code = 1)
AND EXISTS (SELECT 1 FROM your_table WHERE code = 2);

逻辑清晰:先过滤出code为1、2的行,再额外加两个全局校验条件,只要任意一个code不存在,校验条件就不成立,整个查询就会返回空。

方案2:计数校验(扩展性更好,适合需要匹配多个code的场景)

如果后续需要匹配的code数量变多,可以用计数统一判断,不用逐个新增exists语句:

WITH target_codes AS (
    -- 这里统一维护需要匹配的code列表,新增时直接加UNION ALL即可
    SELECT 1 code UNION ALL 
    SELECT 2
),
matched_result AS (
    SELECT a.* FROM your_table a 
    INNER JOIN target_codes t ON a.code = t.code
)
SELECT * FROM matched_result
-- 校验匹配到的唯一code数量和目标code数量完全一致
WHERE (SELECT COUNT(DISTINCT code) FROM matched_result) = (SELECT COUNT(*) FROM target_codes);

原写法问题说明

你现在的写法有两个核心问题:

  1. SQL条件优先级错误:AND的优先级高于OR,你的原语句实际执行逻辑是WHERE a.code=2 OR (a.code=1 AND exists(...)),只要code=2存在就会返回结果,完全不符合需求
  2. 关联exists逻辑错误:子查询里用a.code = b.code只能校验当前行的code存在,无法校验另一个目标code也存在,所以就算你加括号修正优先级,也达不到两个code都存在才返回的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:57:02