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

使用AND子句匹配多行的SQL查询问题求助

解决方案:仅当两个行条件同时满足时返回匹配行

问题根源

你当前的查询逻辑存在核心问题:

  • 用AND连接条件时,单条记录的DOB不可能同时等于两个不同日期,因此无结果返回
  • 用OR连接时,只要有一条记录匹配就会返回,无法保证两个目标条件对应的行都存在

可行解决方法

方法1:窗口函数统计匹配记录数

通过窗口函数计算当前ID下满足目标条件的记录总数,仅当总数为2(即两个日期的记录都存在)时返回结果:

SELECT ID, DOB
FROM (
    SELECT ID, DOB,
           COUNT(*) OVER (PARTITION BY ID) AS match_count
    FROM SINGLE_COL_MULTI_COND
    WHERE ID = 111 
      AND DOB IN (DATE '2023-01-01', DATE '2024-05-01')
) t
WHERE match_count = 2;

方法2:EXISTS子查询验证双条件存在

分别检查两个目标日期的记录是否都存在,只有两者都满足时才返回匹配行:

SELECT ID, DOB
FROM SINGLE_COL_MULTI_COND
WHERE ID = 111 
  AND DOB IN (DATE '2023-01-01', DATE '2024-05-01')
  AND EXISTS (SELECT 1 FROM SINGLE_COL_MULTI_COND WHERE ID = 111 AND DOB = DATE '2023-01-01')
  AND EXISTS (SELECT 1 FROM SINGLE_COL_MULTI_COND WHERE ID = 111 AND DOB = DATE '2024-05-01');

方法3:GROUP BY + HAVING筛选合格ID

先筛选出满足任一条件的记录,按ID分组后确认该ID包含两个目标日期,再关联原表获取具体行:

SELECT scmc.ID, scmc.DOB
FROM SINGLE_COL_MULTI_COND scmc
JOIN (
    SELECT ID
    FROM SINGLE_COL_MULTI_COND
    WHERE ID = 111 
      AND DOB IN (DATE '2023-01-01', DATE '2024-05-01')
    GROUP BY ID
    HAVING COUNT(DISTINCT DOB) = 2
) t ON scmc.ID = t.ID
WHERE scmc.DOB IN (DATE '2023-01-01', DATE '2024-05-01');

效果验证

  • 当两个日期的记录都存在时,三种方法都会返回两行数据
  • 若其中一个日期的记录不存在,三种方法都不会返回任何结果,完全符合你的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:57:14