2017-07-29 35 views
0

比方說,我有一個表K1,K2,V列,其中(K1,K2)是一個複合主鍵。我有一個K1值列表'possibleNew'。我想查找表中沒有匹配的所有值,例如(在這裏沒有正確的語法)ORACLE SQL查詢 - 爲NOT EXISTS測試密鑰列表?

SELECT PN.K1 
FROM [some way of specifying the list inline] as PN 
WHERE PN.K1 NOT IN (SELECT T.K1 from myTable T) 

這是使用Oracle 12.謝謝!

回答

1

「我有一個列表K1值‘possiblyNew’」

所以現在的問題是,其中你有這些價值觀?您需要將它們放入SQL構造中,以便在查詢中使用它們。

假設他們是數字,所以你可以實例化集合sys.odcinumberlist與他們的陣列。這樣做可以讓您通過table()函數將它們放入FROM子句中:

SQL> select * from t1; 

     K1   K2 V 
---------- ---------- --------- 
     1   2 27-JUL-17 
     2   1 06-JUL-17 
     4   3 29-JUL-17 

SQL> select column_value 
    2 from table(sys.odcinumberlist (2, 3, 4, 5)) 
    3 where column_value not in 
    4  (select k1 from t1) 
    5/

COLUMN_VALUE 
------------ 
      3 
      5 

SQL> 
0

如果您有一個表中的值,請嘗試:

SELECT * FROM TABLE_A WHERE (K1, K2) NOT IN (SELECT K1, K2 FROM TABLE_B) 

如果沒有,你可以嘗試其中的一個:

SELECT * FROM TABLE_A WHERE K1 NOT IN ('k1', 'k2', 'k3', ..., 'kn') 

WITH myList AS (
    SELECT 'k1' AS K 
    UNION 
    SELECT 'k2' 
) 
SELECT * FROM TABLE_A WHERE K1 NOT IN (SELECT K FROM myList) 

CREATE TABLE MY_VALUES (...) 
INSERT INTO MY_VALUES ('k2'); 
INSERT INTO MY_VALUES ('k1'); 
... 
INSERT INTO MY_VALUES ('kn'); 
SELECT * FROM TABLE_A WHERE K1 NOT IN (SELECT K1 FROM MY_VALUES)