2つのテーブルがあり、1つには主キーがあり、もう1つには外部キーとしてあります。
セカンダリテーブルにそのキーを含むエントリがない場合にのみ、プライマリテーブルからデータをプルしたい。そのキーで結合する行のみを返す単純な内部結合の反対のようなものです。
回答:
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
結合の完全な画像
aticleから:http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
B.Key IS NULL
が、私たちはまだ匹敵しA.Key = B.Key
ますか?
SELECT
*
FROM
primarytable P
WHERE
NOT EXISTS (SELECT * FROM secondarytable S
WHERE
P.PKCol = S.FKCol)
一般的に、または(NOT) EXISTS
より良い選択です(NOT) IN
(LEFT) JOIN
LEFT JOIN
パフォーマンスが優れていますNOT EXIST
SELECT P.*
FROM primary_table P
LEFT JOIN secondary_table S on P.id = S.p_id
WHERE S.p_id IS NULL
P.key = S.key
を使用してから「」と言うとwhere S.key IS NULL
、P.keyもnullになりませんか?
これは、CognosでSQLの「Notin」ステートメントを作成することが許可されていたため、COGNOSでの使用に役立ちましたが、実行に時間がかかりすぎました。CognosのテーブルBに結合するテーブルAをA.key "not in" B.keyとして手動でコーディングしましたが、クエリに時間がかかりすぎるか、5分後に結果が返されませんでした。
Cognosで「NOTIN」ソリューションを探している他の人のために、これが私がしたことです。リンクタイプを選択して、CognosでテーブルAとBをLEFT JOINで結合するクエリを作成します。テーブルA.KeyのテーブルBに「0からN」の値があり、テーブルBのフィルタ(これらはWhere句に対応)を追加します。 .KeyがNULLです。
速く走り、魅力のように。