Sql 选择顶部的对面?
Transact-SQL有一个方便的Sql 选择顶部的对面?,sql,sql-server,Sql,Sql Server,Transact-SQL有一个方便的从……… 我想做一个SELECT查询,返回表中最后的“n”个条目,而不是第一个条目 这是我将使用SELECT TOP返回表中输入的前4项的查询: sql = "SELECT TOP 4 [news_title], [news_date_added], [news_short_description], [news_ID] FROM [Web_Xtr_News] WHERE ([news_type] = 2 OR [news_type] = 3) AND [
从………
我想做一个SELECT查询,返回表中最后的“n”个条目,而不是第一个条目
这是我将使用SELECT TOP返回表中输入的前4项的查询:
sql = "SELECT TOP 4 [news_title], [news_date_added], [news_short_description],
[news_ID] FROM [Web_Xtr_News] WHERE ([news_type] = 2 OR [news_type] = 3) AND
[news_language] = '" + Language + "' ORDER BY [news_ID] ASC"
我需要返回最后4个为什么不继续使用TOP,并颠倒顺序
SELECT TOP 4 [news_title],
[news_date_added],
[news_short_description],
[news_ID]
FROM [Web_Xtr_News]
WHERE ([news_type] = 2
OR [news_type] = 3)
AND [news_language] = @Language
ORDER BY [news_ID] DESC
(当然,重新编写是为了使用参数,您的原始版本容易受到SQL注入的影响)您可以在查询结束时使用
DESC
而不是ASC
来反向排序。将表的顺序从ASC
更改为DESC正是这样的:
数据来源:
| N |
|----|
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
输出:
| N |
|----|
| 7 |
| 8 |
| 9 |
| 10 |
您不应该构造这样的SQL -使用参数化查询来避免反向操作的风险。请阅读以下内容:您可能会考虑阅读“M $”产生的文档,因为这在这里得到了明确的解释。你还应该尽量避免对你所使用的产品的销售商使用贬义的昵称,这是相当侮辱和幼稚的。愚蠢的论点。如果这是一个标准,他们不能简单地发明一个新的关键字,仍然称之为SQL。仅供参考-Aaron为MS工作,所以你侮辱了他。我们没有足够的上下文来知道注入是不可能的。如果您大量使用SQL,您甚至不应该问这个问题。当然,不同的条款是按照特定的顺序进行评估的——这些都是记录在案的。也许您应该研究一下SQL执行引擎的内部结构。当然,这只会返回前4名,但顺序正好相反?@BaronVonPeterWright-您费心尝试了吗?WHERE
“执行”在TOP
之前。因为订购可能很昂贵。@这是设计太糟糕了,这是问题中的一个要求。在不指定顺序的情况下,如何定义无序集合中的“第一个”或“最后一个”?我认为OP的期望是存在类似于BOTTOM
的东西,与TOP
相反。如果您有一个索引(例如,asc
),则不必将记录重新排序到desc
,只需获取最后一项,这是有意义的。因此,更准确地说:“为什么不继续使用TOP,并颠倒顺序?”——因为它需要*额外的订购,这可能会很昂贵。我明白这是不可能的,只是想回答你的问题。
| N |
|----|
| 7 |
| 8 |
| 9 |
| 10 |