2017-07-29 2 views
0

私は、列K1、K2、Vを持つテーブルを持っているとしましょう。ここで(K1、K2)は複合主キーです。私はK1値のリストを 'おそらくニュー'としています。テーブル内に一致するものがないリスト内の値をすべて検索したいとします。 (ここで正しい構文についてはわかりません)ORACLE SQL Query - 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) 
関連する問題