查询
select * from tbl_emp
where emp_salary=(
select top 1 emp_salary from
(
select distinct top 3 emp_salary
from tbl_emp
order by emp_salary desc
)
)a
order by emp_salary
or emp_salary=
(select * from tbl_emp)
错误
Msg 102, Level 15, State 1, Line 3
Incorrect syntax near ')'.
答案 0 :(得分:0)
您在这里混合了where
和order by
:
where .....some conditions....
order by emp_salary or emp_salary=
(select * from tbl_emp)
修改您的查询并找到order by
答案 1 :(得分:0)
布置查询使其更具可读性(缩进是你的朋友!)
有两个问题。首先,由于a
括号位于错误的位置,您使用)
命名了错误的子查询。其次,我删除了ORDER BY
,因为我不确定为什么需要它并且导致错误。
select *
from tbl_emp
where emp_salary = (select top 1 emp_salary
from (select distinct top 3 emp_salary
from tbl_emp
order by emp_salary desc) a)
--order by emp_salary
or emp_salary=(select * from tbl_emp)
现在重构查询。首先,您可以看到不需要内部子查询
select *
from tbl_emp
where emp_salary = (select top 1 emp_salary
from tbl_emp
order by emp_salary desc)
--order by emp_salary
or emp_salary=(select * from tbl_emp)
最后值得指出的是,最后一部分(OR
子句)仅在tbl_emp
完全有1列并且只有1行时才有效,换句话说,它必须返回单个值,否则你将得到以下错误之一:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
当EXISTS没有引入子查询时,只能在选择列表中指定一个表达式。