为啥查询显示“无效的关系运算符”

Posted

技术标签:

【中文标题】为啥查询显示“无效的关系运算符”【英文标题】:why query is showing 'invalid relational operator'为什么查询显示“无效的关系运算符” 【发布时间】:2020-08-28 22:27:22 【问题描述】:
select * 
from employees
 where department_id,salary in (
    select department_id,max(salary) 
    from employees group by department_id
 )

【问题讨论】:

【参考方案1】:

您想要元组比较 - 您需要用括号将 in 左侧的列元组括起来:

select * 
from employees 
where (department_id,salary) in (
    select department_id, max(salary) from employees group by department_id
)

请注意,这个 top-1-per-group 查询可以使用窗口函数更有效地表达:

select *
from (
    select e.*, rank() over(partition by department_id order by salary desc nulls last) rn
    from employees e
) t
where rn = 1

【讨论】:

我们应该希望SALARY 永远不会是null - 如果可以,null 行将在订购desc 时排在第一位。这是使用降序时的默认值。为了安全起见,我们应该在order by salary desc 之后添加nulls last 选项。

以上是关于为啥查询显示“无效的关系运算符”的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00920: 无效的关系运算符

由于 ORA-00920 导致过程失败:无效的关系运算符

Oracle SQL where 子句中的函数

在Oracle Apex中显示按钮时,服务器端条件取决于页面项的值?

使用 XML 提取值语句

为啥关系运算符不能在指针和数组中工作[关闭]