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')
这样的纯文本,你需要两对,但是两对总是有效所以我总是使用两对.
这个查询给我一个 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')
这样的纯文本,你需要两对,但是两对总是有效所以我总是使用两对.