gpt4 book ai didi

SQL按字母顺序获取结果范围

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

我有一张 table ,tblTags它的工作方式与 StackOverflows 标记系统大致相同。

当我查看标签页面时,假设标签 Tutorial我想按字母顺序显示前后的 10 个标签。

所以如果我们得到标签 Tutorial ID 30我们如何以类似于以下的顺序返回记录集:

Tap
Tart
> Tutorial
Umbrellas
Unicorns
Xylaphones

我已经想到了这样做的方法,在我看来很糟糕,因为它们涉及检索丑陋的数据量。

我不确定是否可以按照(伪)的方式做一些事情:
SELECT RANGE(0 - 30) FROM tblTags ORDER BY Name ASC

但是如何在不遍历整个列表直到找到它的情况下,以有效的方式知道教程标签在列表中的位置?

如果有任何不同,我将 SQL Server 2008 R2 Express 与 LINQ 一起使用,SQL 查询或 LINQ 将是很好的答案,谢谢!

最佳答案

根据 Jacob 的 UNION 建议,您使用一个表变量来选择匹配的 TagID,然后连接回 Tag 表以获取匹配的记录。它不像我想要的那么优雅,但它确实有效。

作为旁注,我认为 UNION 方法会起作用,但 AFAIK SQL Server 只允许在最后一个 SELECT 上使用 ORDER BY,并且 ORDER BY 适用于整个结果集( this post 也说明了同样的事情)。

DECLARE @tags AS TABLE(TagID INT, Name VARCHAR(30))
INSERT INTO @tags VALUES(1, 'a')
INSERT INTO @tags VALUES(2, 'b')
INSERT INTO @tags VALUES(3, 'c')
INSERT INTO @tags VALUES(4, 'd')
INSERT INTO @tags VALUES(5, 'e')
INSERT INTO @tags VALUES(6, 'f')
INSERT INTO @tags VALUES(7, 'g')
INSERT INTO @tags VALUES(8, 'h')
INSERT INTO @tags VALUES(9, 'i')
INSERT INTO @tags VALUES(10, 'j')

DECLARE @selectedTags AS TABLE(TagID INT)
INSERT INTO @selectedTags
SELECT TOP 2 TagID FROM @tags WHERE Name < 'e' ORDER BY Name DESC
INSERT INTO @selectedTags
SELECT TOP 2 TagID FROM @tags WHERE Name >= 'e' ORDER BY Name

SELECT *
FROM @tags T
JOIN @selectedTags ST ON ST.TagID = T.TagID
ORDER BY T.Name

关于SQL按字母顺序获取结果范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474901/

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