私は3つのテーブルを持っています
見込み客 -- 見込み客情報を保持します
id
name
projectID
見込み客のサンプルデータ
id | name | projectID
1 | p1 | 1
2 | p2 | 1
3 | p3 | 1
4 | p4 | 2
5 | p5 | 2
6 | p6 | 2
Conjoint -- コンジョイント情報を保持します
id
title
projectID
サンプルデータ
id | title | projectID
1 | color | 1
2 | size | 1
3 | qual | 1
4 | color | 2
5 | price | 2
6 | weight | 2
プロスペクトのコンジョイント値を保持する連想テーブルがあります。
ConjointProspect
id
prospectID
conjointID
value
サンプルデータ
id | prospectID | conjointID | value
1 | 1 | 1 | 20
2 | 1 | 2 | 30
3 | 1 | 3 | 50
4 | 2 | 1 | 10
5 | 2 | 3 | 40
それぞれのテーブルに 1 つ以上のプロスペクトと 1 つ以上のコンジョイントがあります。プロスペクトには、各コンジョイントの値がある場合とない場合があります。
特定のプロジェクトの各プロスペクトのすべてのコンジョイント値を抽出し、特定のコンジョイントとプロスペクトの ConjointProspect テーブルに存在しない値の値がない場合は NULL を表示する SQL ステートメントが必要です。
projectID = 1 の場合、これに沿ったもの
prospectID | conjoint ID | value
1 | 1 | 20
1 | 2 | 30
1 | 3 | 50
2 | 1 | 10
2 | 2 | NULL
2 | 3 | 40
3 | 1 | NULL
3 | 2 | NULL
3 | 3 | NULL
プロスペクト テーブルとコンジョイント テーブルで内部結合を使用してから、ConjointProspect で左結合を使用しようとしましたが、どこかで意味をなさないプロスペクト/コンジョイント ペアのデカルト積を取得しています (私にとって)
SELECT p.id, p.name, c.id, c.title, cp.value
FROM prospect p
INNER JOIN conjoint c ON p.projectID = c.projectid
LEFT JOIN conjointProspect cp ON cp.prospectID = p.id
WHERE p.projectID = 2
ORDER BY p.id, c.id
prospectID | conjoint ID | value
1 | 1 | 20
1 | 2 | 30
1 | 3 | 50
1 | 1 | 20
1 | 2 | 30
1 | 3 | 50
1 | 1 | 20
1 | 2 | 30
1 | 3 | 50
2 | 1 | 10
2 | 2 | 40
2 | 1 | 10
2 | 2 | 40
2 | 1 | 10
2 | 2 | 40
3 | 1 | NULL
3 | 2 | NULL
3 | 3 | NULL
ご指導大歓迎です!!