我想通过仅考虑IN子句中的值来获取表中不存在的值。
例如,
select orderNumber from order where orderNumber in (List of orderNumbers)
这将通过考虑IN子句中存在的值来给出表中存在的orderNumbers,同样我想通过考虑IN子句中存在的值来获取表中不存在的orderNumbers。
是否存在任何查询逻辑来处理这种情况?
答案 0 :(得分:0)
您需要使用left outer join
和where
子句进行联接:
select on.*
from (select 1 as OrderNumber from dual union all
select 2 from dual
. . .
select n from dual
) ordn left outer join
orders o
on o.ordernumber = ordn.ordernumber
where o.ordernumber is NULL;
答案 1 :(得分:0)
我认为您要找的是MINUS
关键字。这可以在没有IN
子句的情况下工作,但是你应该可以使这个工作适用于你的用例。
这会使in_clause_table
中的所有订单号都不在order
。
SELECT ordernumbers FROM in_clause_table
MINUS
SELECT orderNumber FROM order;
注意:顺便提一下,有很多方法可以达到这个目的,但我认为这可能是最简洁的方法。
答案 2 :(得分:0)
不重复IN子句的一种方法是使用子查询分解子句:
WITH Q1 AS
(SELECT ORDERNUMBER
FROM ORDERS
WHERE ORDERNUMBER IN (1, 2, 3, 4))
SELECT q.ORDERNUMBER AS INCLUDED_ORDERNUMBER,
NULL AS EXCLUDED_ORDERNUMBER
FROM Q1 q
UNION ALL
SELECT NULL AS INCLUDED_ORDERNUMBER,
o.ORDERNUMBER AS EXCLUDED_ORDERNUMBER
FROM ORDERS o
WHERE o.ORDERNUMBER NOT IN (SELECT ORDERNUMBER FROM Q1);
分享并享受。