我有这个查询,而且收到错误“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
)
答案 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优化器无法识别内连接,您将获得显着的性能提升