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

如何在自连接中使用EXISTS查询Orgorder从未等于1的Id

问题需求

查询MSSQL中TEST表内,所有ORGORDER字段值从未等于1的Id。

测试表结构与数据

CREATE TABLE [dbo].[TEST](
    [ORGORDER] [int] NULL,
    [Id] [int] NOT NULL,
    [ORGTYPE] [varchar](30) NULL,
    ORGID INT NULL,
    [LEAD] [decimal](19, 2) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE] ,ORGID, [LEAD]) VALUES (1, 100, N'ABC',1, NULL)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (0, 100, N'ABC',2, 0)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (0, 100, N'ACD',1, NULL)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (0, 101, N'ABC',0, 0)
GO
INSERT [dbo].[TEST] ([ORGORDER], [Id], [ORGTYPE],ORGID, [LEAD]) VALUES (2, 101, N'ABC',4, NULL)
GO

预期返回结果

ID
101
正确查询语句

方案1:使用NOT EXISTS实现(符合自连接逻辑思路)

SELECT DISTINCT Id
FROM TEST t1
WHERE NOT EXISTS (
    SELECT 1 
    FROM TEST t2 
    WHERE t2.Id = t1.Id 
      AND t2.ORGORDER = 1
)

逻辑说明:遍历每一条记录,检查是否存在同Id下ORGORDER等于1的记录,若不存在则保留该Id,用DISTINCT去重避免同一个Id多次返回。

方案2:使用GROUP BY + HAVING实现(更简洁高效)

SELECT Id
FROM TEST
GROUP BY Id
HAVING MAX(CASE WHEN ORGORDER = 1 THEN 1 ELSE 0 END) = 0

逻辑说明:按Id分组后,每组只要存在一条ORGORDER=1的记录,聚合后的最大值就为1,筛选最大值为0的分组,即为所有ORGORDER从未等于1的Id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:45:03