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

如何编写SQL查询仅获取指定状态记录并排除特定条目

问题分析与SQL优化方案

核心需求

  • 排除同一设施地址下同时存在LICENSED和CLOSED状态的记录(即示例中的记录2)
  • 仅保留状态为CLOSED,且对应地址无LICENSED状态记录的条目(即仅获取示例中的记录3)

原查询的问题

原查询仅通过单条记录的状态条件过滤,未考虑同一地址下的其他记录状态,因此会同时返回记录2和3,无法满足需求。

优化后的查询方案

方案1:使用NOT EXISTS子查询(逻辑直观,推荐)

SELECT T2.[ID], T2.[Facility Type], T2.[Facility Status], T2.[Facility City], T2.[Facility Address]
FROM T2
WHERE T2.[Facility Status] = 'Closed'
  AND T2.[Facility City] = 'Walnut Creek'
  AND NOT EXISTS (
    -- 检查当前地址是否存在LICENSED状态的记录
    SELECT 1
    FROM T2 AS T1
    WHERE T1.[Facility Address] = T2.[Facility Address]
      AND T1.[Facility Status] = 'LICENSED'
  );

逻辑说明:通过NOT EXISTS确保当前记录的地址下没有任何LICENSED状态的记录,直接排除掉和LICENSED记录同地址的CLOSED记录。

方案2:使用分组过滤+JOIN

WITH ValidAddresses AS (
    -- 筛选出无LICENSED状态记录的地址
    SELECT [Facility Address]
    FROM T2
    GROUP BY [Facility Address]
    HAVING SUM(CASE WHEN [Facility Status] = 'LICENSED' THEN 1 ELSE 0 END) = 0
)
SELECT T2.[ID], T2.[Facility Type], T2.[Facility Status], T2.[Facility City], T2.[Facility Address]
FROM T2
JOIN ValidAddresses VA ON T2.[Facility Address] = VA.[Facility Address]
WHERE T2.[Facility Status] = 'Closed'
  AND T2.[Facility City] = 'Walnut Creek';

逻辑说明:先通过CTE筛选出所有不存在LICENSED状态的地址,再将原表与这些地址关联,最终得到符合条件的CLOSED记录。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:40:28