2017-05-25 7 views
1

テーブルCとテーブルAの間に関係がないことを見つけるクエリを作成しようとしています。この関係について知っている唯一のテーブルはテーブルBです。2つのテーブルの間に関係がないことを見つけるためのSqlクエリ

|Table A| |Table B|      |Table C| 
--------- ---------      --------- 
|id: 1 | |id: 2, a_id: 1, c_id: 3|  |id: 3 | 
|id: 4 |         |id: 5 | 

表Cの表Aに関連していないすべての項目について、私はそれについて知りたいと思います。

出力例:

|Output| 
-------- 
|c_id: 3, a_id: 4| 
|c_id: 5, a_id: 1| 
|c_id: 5, a_id: 4| 

うまくいけば、あなたはそれに従うことができます。私はそれに私の心をラッキングしてきたし、私は解決策を見ていない。

答えて

2

ACの間のクロス結合を実行する場合は、句を使用して、Bにある組み合わせを除外します。

SELECT C.id AS c_id, A.id AS a_id 
    FROM C, A 
WHERE NOT EXISTS (SELECT * FROM B WHERE B.a_id = A.id AND B.c_id = C.id) 

あなたがsql-serverをタグ付けするので、あなたもEXCEPT句を使用することができます。

SELECT C.id AS c_id, A.id AS a_id FROM C, A 
EXCEPT 
SELECT c_id, a_id FROM B 

最初のSQLデータベースはすべてのSQLデータベースで動作します。 2つ目は、一部でのみ動作します。

  • EXCEPTは、MS SQL Server、PostgreSQL、DB2およびSQLiteで動作します。
  • MINUSはOracleで動作します。
  • MySQLにはその機能がありません。
0

は左これはあなたのためにそれを行う必要があり、null値

select A.id, C.id 
from B left outer join A on A.id= B.a_id left outer join C on C.id = B.c_id 
where B.a_id is null or B.c_id is null 
0

を見つけて参加してみてください。

SELECT c.id, a.id 
FROM c 
    JOIN a 
WHERE (SELECT id 
    FROM b 
    WHERE b.a_id = a.id AND 
    b.c_id = c.id) IS NULL 
ORDER BY c.id, a.id; 
2

この

SELECT C.id AS c_id, A.id AS a_id 
FROM C cross join A left outer join b on B.a_id = A.id AND B.c_id = C.id 
WHERE b.id is null 
を試してみてください
関連する問題