gpt4 book ai didi

sql - 简单的重构sql查询

转载 作者:行者123 更新时间:2023-12-04 23:43:27 27 4
gpt4 key购买 nike

我有带行的表:

ID          CountryCode Status
----------- ----------- -----------
2 PL 1
3 PL 2
4 EN 1
5 EN 1

并通过查询
SELECT *
FROM [TestTable]
WHERE Status = 1 AND CountryCode NOT IN (SELECT CountryCode
FROM [TestTable]
WHERE Status != 1)

我得到所有没有状态值 = 2 的国家/地区代码
ID          CountryCode Status
----------- ----------- -----------
4 EN 1
5 EN 1

我觉得这个查询可以更简单、更清晰。

我怎样才能改变它?

此致

编辑

PL 不能在结果中,因为有一个状态为 2 的记录

编辑

创建和填充表格的脚本:
USE [DatabaseName]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TestTable](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CountryCode] [nvarchar](2) NOT NULL,
[Status] [int] NOT NULL
) ON [PRIMARY]

INSERT INTO dbo.TestTable
( CountryCode, Status )
VALUES ( 'PL', -- CountryCode - nvarchar(2)
1 -- Status - int
)

INSERT INTO dbo.TestTable
( CountryCode, Status )
VALUES ( 'PL', -- CountryCode - nvarchar(2)
2 -- Status - int
)

INSERT INTO dbo.TestTable
( CountryCode, Status )
VALUES ( 'EN', -- CountryCode - nvarchar(2)
1 -- Status - int
)
INSERT INTO dbo.TestTable
( CountryCode, Status )
VALUES ( 'EN', -- CountryCode - nvarchar(2)
1 -- Status - int
)

最佳答案

第一:从不使用 SELECT *在经常使用的代码中。尤其是在生产中。调出你的专栏。

肥皂盒结束。

注意:这个我没试过,我目前没有安装管理工作室,所以我无法测试。但我认为你想要这样的东西:

Select Id, CountryCode, Status
From [TestTable] t
Where Status <> 2
And Not Exists(select status from [TestTable] t2
where t2.Status = 2
and t2.CountryCode = tt.CountryCode)

至少,您有正确的想法:如果您只想要不(在任何记录上)对应于状态 = 2 的国家/地区代码,则需要获取状态为 1 的所有内容,然后排除任何现有行匹配状态为 2 的行。不过,我可能对 Not Exists 的特定语法不正确。

关于sql - 简单的重构sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6283259/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com