如何在子查询中使用top而不按列使用顺序

时间:2013-06-06 14:31:09

标签: sql sql-server sql-server-2008

我有这个查询,而且收到错误“The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

我在内部查询中使用TOP解决了这个问题,但有些情况下我不会测量记录数。还有其他可能来解决它​​吗?

select *
from rs_column_lang
where column_id in (
    select column_id
    from rs_column
    order by column_id
)

5 个答案:

答案 0 :(得分:3)

在内部查询中使用order by没有意义。您正在检查外部查询是否匹配记录,但是您正在读取内部查询的整个表以查找匹配项。对内部查询进行排序没有任何意义,因此SQL Server会因此而对你大吼大叫。

与其他答案一样,假设您的目标是对结果进行排序,您的order by应该是外部查询的一部分,而不是内部查询。

top在内部查询中起作用的原因是它会根据您的排序方式更改查询结果。但只是改变顺序不会改变结果。

答案 1 :(得分:1)

试试这个

select  * from rs_column_lang
where column_id in 
(
select column_id from rs_column
)
order by column_id

答案 2 :(得分:1)

select  * from rs_column_lang
where column_id in (
select column_id from rs_column
)
order by column_id

答案 3 :(得分:0)

column_id在rs_column_lang和rs_column中包含相同的数据,因此您只需在外部查询中移动ORDER BY:

SELECT * FROM rs_column_lang
WHERE column_id IN (
    SELECT column_id FROM rs_column
)
ORDER BY column_id

答案 4 :(得分:0)

您应该优化您的查询,就像这样

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优化器无法识别内连接,您将获得显着的性能提升