2番目のテーブルに結合するときに複数のテーブルを結合し、3番目のテーブルに句を持つことを試みています。私はどこで句を試してみましたが、2番目のテーブルの列を無効にしたいときは、結果全体に適用されます。他のテーブルの条件付きテーブルへの左結合テーブル
例を置くと、より明確になります。 私は4つのテーブルを有する:サンプルデータがあろう
表CおよびDに、テーブルAを結合
CREATE TABLE A (ID INTEGER PRIMARY KEY);
CREATE TABLE B (ID INTEGER PRIMARY KEY, A_ID INTEGER, C_ID INTEGER, D_ID INTEGER);
CREATE TABLE C (ID INTEGER PRIMARY KEY, CONDITIONS INTEGER);
CREATE TABLE D (ID INTEGER PRIMARY KEY, CONDITIONS INTEGER);
テーブルBを:
INSERT INTO A VALUES (1);
INSERT INTO A VALUES (2);
INSERT INTO A VALUES (3);
INSERT INTO C VALUES (1, 1);
INSERT INTO C VALUES (2, 1);
INSERT INTO C VALUES (3, 0);
INSERT INTO D VALUES (1, 0);
INSERT INTO D VALUES (2, 0);
INSERT INTO B VALUES (1, 1, 1, NULL);
INSERT INTO B VALUES (2, 1, 2, NULL);
INSERT INTO B VALUES (3, 1, 3, NULL);
INSERT INTO B VALUES (4, 2, NULL, 1);
INSERT INTO B VALUES (5, 2, NULL, 2);
直接左ジョイン:
SELECT A.ID, B.ID, C.ID, D.ID
FROM A
LEFT JOIN B ON B.A_ID = A.ID
LEFT JOIN C ON B.C_ID = C.ID
LEFT JOIN D ON B.D_ID = D.ID;
は、データを返します。
╔══════╦══════╦══════╦══════╗
║ A.id ║ B.id ║ C.id ║ D.id ║
╠══════╬══════╬══════╬══════╣
║ 1 ║ 1 ║ 1 ║ null ║
║ 1 ║ 2 ║ 2 ║ null ║
║ 1 ║ 3 ║ 3 ║ null ║
║ 2 ║ 4 ║ null ║ 1 ║
║ 2 ║ 5 ║ null ║ 2 ║
║ 3 ║ null ║ null ║ null ║
╚══════╩══════╩══════╩══════╝
私がしようとしているのは、CテーブルとDテーブルのデータでBテーブルをフィルタリングすることです。私は単に要求にWHERE条件を追加する場合 :それはロジックだ
╔══════╦══════╦══════╦══════╗
║ A.id ║ B.id ║ C.id ║ D.id ║
╠══════╬══════╬══════╬══════╣
║ 1 ║ 1 ║ 1 ║ null ║
║ 1 ║ 2 ║ 2 ║ null ║
║ 3 ║ null ║ null ║ null ║
╚══════╩══════╩══════╩══════╝
を私は望んでいないものを:
SELECT A.ID, B.ID, C.ID, D.ID
FROM A
LEFT JOIN B ON B.A_ID = A.ID
LEFT JOIN C ON B.C_ID = C.ID
LEFT JOIN D ON B.D_ID = D.ID
WHERE (C.ID IS NULL OR C.CONDITIONS = 1)
AND (D.ID IS NULL OR D.CONDITIONS = 1);
それを返します。私が欲しいのです:
A.ID = 2
で行を保持しますが、私は入社
ON
句で条件を入れてみましたCとD
からの一致条件とBに値が見つからない
╔══════╦══════╦══════╦══════╗
║ A.id ║ B.id ║ C.id ║ D.id ║
╠══════╬══════╬══════╬══════╣
║ 1 ║ 1 ║ 1 ║ null ║
║ 1 ║ 2 ║ 2 ║ null ║
║ 2 ║ null ║ null ║ null ║
║ 3 ║ null ║ null ║ null ║
╚══════╩══════╩══════╩══════╝
CとDのテーブルがありますが、それはBからのデータを保持します:
╔══════╦══════╦══════╦══════╗
║ A.id ║ B.id ║ C.id ║ D.id ║
╠══════╬══════╬══════╬══════╣
║ 1 ║ 1 ║ 1 ║ null ║
║ 1 ║ 2 ║ 2 ║ null ║
║ 1 ║ 3 ║ null ║ null ║
║ 2 ║ 4 ║ null ║ null ║
║ 2 ║ 5 ║ null ║ null ║
║ 3 ║ null ║ null ║ null ║
╚══════╩══════╩══════╩══════╝
私は今トリックをするアイデアがありません。あなたがする必要がどのような
あなたの条件をどこからジョイントパートに移動してみることができますか? – Veljko89
I. WHEREからONへ。 – jarlh
@jarlhそれは私が務めているものです、 – Veljko89