从表格中获取仅在' IN'中不存在的值。条款

时间:2014-06-28 15:16:11

标签: mysql sql oracle plsql

我想通过仅考虑IN子句中的值来获取表中不存在的值。

例如,

select orderNumber from order where orderNumber in (List of orderNumbers)

这将通过考虑IN子句中存在的值来给出表中存在的orderNumbers,同样我想通过考虑IN子句中存在的值来获取表中不存在的orderNumbers。

是否存在任何查询逻辑来处理这种情况?

3 个答案:

答案 0 :(得分:0)

您需要使用left outer joinwhere子句进行联接:

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);

分享并享受。