Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在不使用子查询中的top的情况下使用order by column_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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