gpt4 book ai didi

SQL Server 前 1 名

转载 作者:行者123 更新时间:2023-12-02 21:59:42 25 4
gpt4 key购买 nike

在 Microsoft SQL Server 2005 或更高版本中,我想获取第一行,如果没有匹配的行,则返回具有默认值的行。

SELECT TOP 1 ID,Name
FROM TableName
UNION ALL
SELECT 0,''
ORDER BY ID DESC

这是可行的,只不过如果表中有数据则返回两行,如果没有则返回 1 行。我希望它始终返回 1 行。我认为这与 EXISTS 有关,但我不确定。它会是这样的:

SELECT TOP 1 * FROM Contact 
WHERE EXISTS(select * from contact)

但如果不存在,则选择 0,''

最佳答案

当表非常满并且您可能想要指定要获取前 1 行的哪一行(例如名字)时,会发生什么情况?在这种情况下,如果您只是更改 ORDER BY 子句,OMG Ponies 的查询将返回错误的答案。他的查询也比此修改花费了大约 8% 的 CPU(尽管它具有相同的读取)

SELECT TOP 1 *
FROM (
SELECT TOP 1 ID,Name
FROM TableName
ORDER BY Name
UNION ALL
SELECT 0,''
) X
ORDER BY ID DESC

不同之处在于内部查询也有一个 TOP 1,并且可以在那里指定哪个 TOP 1(如图所示)。

只是为了好玩,这是另一种方法,其执行结果与上述查询非常接近(-15ms 到 +30ms)。虽然对于这样一个简单的查询来说,它比必要的要复杂,但它演示了一种我没有看到其他 SQL 人员经常使用的技术。

SELECT
ID = Coalesce(T.ID, 0),
Name = Coalesce(T.Name, '')
FROM
(SELECT 1) X (Num)
LEFT JOIN (
SELECT TOP 1 ID, Name
FROM TableName
ORDER BY ID DESC
) T ON 1 = 1 -- effective cross join but does not limit rows in the first table

关于SQL Server 前 1 名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202292/

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