Sql 如何在不使用子查询中的top的情况下使用order by column
我收到了这个查询,它得到了一个错误“Sql 如何在不使用子查询中的top的情况下使用order by column,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我收到了这个查询,它得到了一个错误“ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。” 我在内部查询中使用TOP解决了这个问题,但在某些情况下,我不会测量记录计数。有没有其他的可能来解决呢 select * from rs_column_lang where column_id in ( select column_id from rs_column order by column_id ) 试试这个 sel
ORDER BY子句在视图、内联函数、派生表、子查询和公共表表达式中无效,除非还指定了TOP或FOR XML。”
我在内部查询中使用TOP
解决了这个问题,但在某些情况下,我不会测量记录计数。有没有其他的可能来解决呢
select *
from rs_column_lang
where column_id in (
select column_id
from rs_column
order by column_id
)
试试这个
select * from rs_column_lang
where column_id in
(
select column_id from rs_column
)
order by column_id
试试这个
select * from rs_column_lang
where column_id in
(
select column_id from rs_column
)
order by column_id
列\u id在rs\u列\u lang和rs\u列中包含相同的数据,因此您可以在外部查询中将订单移动到:
SELECT * FROM rs_column_lang
WHERE column_id IN (
SELECT column_id FROM rs_column
)
ORDER BY column_id
列\u id在rs\u列\u lang和rs\u列中包含相同的数据,因此您可以在外部查询中将订单移动到:
SELECT * FROM rs_column_lang
WHERE column_id IN (
SELECT column_id FROM rs_column
)
ORDER BY column_id
在内部查询中使用order by
是没有意义的。您正在检查外部查询中是否有匹配的记录,但您正在读取内部查询中的整个表以查找匹配项。对内部查询进行排序没有任何意义,因此SQL Server会为此向您大喊大叫
与其他答案一样,假设您的目标是对结果进行排序,那么您的排序依据应该是外部查询的一部分,而不是内部查询的一部分
top
在内部查询中起作用的原因是它会根据您的排序方式更改查询结果。但是仅仅改变顺序不会改变结果。在内部查询中使用order by
是没有意义的。您正在检查外部查询中是否有匹配的记录,但您正在读取内部查询中的整个表以查找匹配项。对内部查询进行排序没有任何意义,因此SQL Server会为此向您大喊大叫
与其他答案一样,假设您的目标是对结果进行排序,那么您的排序依据应该是外部查询的一部分,而不是内部查询的一部分
top
在内部查询中起作用的原因是它会根据您的排序方式更改查询结果。但是仅仅改变顺序不会改变结果。你应该像这样优化你的查询
select A.*
from rs_column_lang A
inner join rs_column B on A.column_id = B.column_id
order by A.column_id
因为这是简单的内部连接
如果DB optimizer无法识别内部联接,您将获得显著的性能改进您应该像这样优化查询
select A.*
from rs_column_lang A
inner join rs_column B on A.column_id = B.column_id
order by A.column_id
因为这是简单的内部连接
如果DB optimizer无法识别内部联接,您将获得显著的性能改进它不是一个视图,它只是一个基表。理解子查询中的顺序对外部查询的顺序没有(正式)影响是非常重要的,无论是否使用top
。唯一保证影响结果的orderby
是外部查询中的一个。“总是这样。”戈登·林诺夫说。但在提供了正确顺序的top之后,我得到了期望的结果集。top
将对“排序”数据进行操作,以获得正确的结果。这并不意味着外部查询中的数据将按排序顺序返回,这是因为它没有意义。“A在(A,B,C)中吗?”和“A在(B,C,A)中吗?”是完全相同的问题——元素的顺序一点也不影响它。您不允许使用它,因为它往往意味着在某个地方正在进行一些错误的思考。它不是一个视图,它只是一个基表。理解子查询中的顺序对外部查询的顺序没有(正式)影响是非常重要的,无论是否使用top
。唯一保证影响结果的orderby
是外部查询中的一个。“总是这样。”戈登·林诺夫说。但在提供了正确顺序的top之后,我得到了期望的结果集。top
将对“排序”数据进行操作,以获得正确的结果。这并不意味着外部查询中的数据将按排序顺序返回,这是因为它没有意义。“A在(A,B,C)中吗?”和“A在(B,C,A)中吗?”是完全相同的问题——元素的顺序一点也不影响它。您不允许这样做,因为这往往意味着在某个地方发生了一些错误的想法。如果我这样做,则会对外部查询的值进行排序。我的要求是应该对内部查询进行排序。您可以添加一些初始数据和所需结果的表示例吗?@RameshMuthiah对内部查询进行排序不会影响整个查询的正确性。您只是询问项是否在{1,2,3,4}
集合中,这与询问它们是否在{4,1,3,2}
集合中是一样的。如果我这样做,它会对外部查询的值进行排序。我的要求是应该对内部查询进行排序。您可以添加一些初始数据和所需结果的表示例吗?@RameshMuthiah对内部查询进行排序不会影响整个查询的正确性。您只是询问项目是否在{1,2,3,4}
集合中,这与询问项目是否在{4,1,3,2}
集合中是相同的。这是否应该是一个按B.column_id排序的顺序,就像他最初试图按子查询排序一样(在您的示例中,已被别名为B的联接表所取代。)没有区别,因为A.column\u id=B.column\u id应该是按B.column\u id排序的,因为他最初试图按子查询排序(在您的示例中,已被别名为B的联接表替换)。没有区别,因为A.column\u id=B.column\u id