ORA-00920: 无效的关系运算符即使没有括号错误

ORA-00920: invalid relational operator even after no parentheses error

这个查询给我一个 ORA-00920: invalid relational operator 错误。 我检查了括号,但它看起来非常好。

DELETE FROM delete_test d
WHERE d.trans_date, d.item_nbr, d.serial_nbr IN (
SELECT b.trans_date, b.item_nbr, b.serial_nbr FROM (
SELECT a.*, RANK() OVER(PARTITION BY serial_nbr ORDER BY trans_date) rnk 
FROM delete_test a) b
WHERE rnk <> 1)
;

谁能帮我调试一下?

您应该使用额外的括号来指定元组

试试这个:

DELETE FROM delete_test d
WHERE (d.trans_date, d.item_nbr, d.serial_nbr) IN ((
SELECT b.trans_date, b.item_nbr, b.serial_nbr FROM (
SELECT a.*, RANK() OVER(PARTITION BY serial_nbr ORDER BY trans_date) rnk 
FROM delete_test a) b
WHERE rnk <> 1))

同样经过一些测试,如果元组是由子查询生成的,你只需要一对括号,但是对于像 ('a','b','c') 这样的纯文本,你需要两对,但是两对总是有效所以我总是使用两对.