0

我有这个查询,它得到错误“ 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
)
4

5 回答 5

3

在您的内部查询中有一个order by没有意义。您正在检查外部查询以查找匹配记录,但您正在阅读内部查询的整个表以查找匹配项。对该内部查询进行排序没有任何意义,因此 SQL Server 会为此大喊大叫。

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

a 在内部查询中起作用的原因top是它会更改查询的结果,具体取决于您订购的内容。但仅仅改变顺序不会改变结果。

于 2013-06-06T14:37:50.043 回答
1

试试这个

select  * from rs_column_lang
where column_id in 
(
select column_id from rs_column
)
order by column_id
于 2013-06-06T14:33:06.733 回答
1
select  * from rs_column_lang
where column_id in (
select column_id from rs_column
)
order by column_id
于 2013-06-06T14:33:16.963 回答
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
于 2013-06-06T14:37:19.137 回答
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

因为这是简单的内连接,如果数据库优化器无法识别内连接,您将获得显着的性能提升

于 2013-06-06T14:58:48.023 回答