A、B、C の 3 つの (MYSQL) テーブルがあります。
私がやりたいことは次のようなものです:
SELECT * FROM a
LEFT JOIN b ON b.a_id = a.id
LEFT JOIN c on c.a_id = a.id
WHERE a.id = 1;
B テーブルに B.a_id = 1 のエントリが 4 つあります。
B.id | b.a_id
1 | 1
2 | 1
3 | 1
4 | 1
Cテーブルにもそのようなエントリが2つあります
C.id | C.a_id
10 | 1
11 | 1
8 つの結果が返されます。
C.id | B.id
10 | 1
10 | 2
10 | 3
10 | 4
11 | 1
11 | 2
11 | 3
11 | 4
同じ C オブジェクトと B オブジェクトを繰り返さずに結果を取得し、このようなものを返す方法はありますか?
C.id | B.id
10 | 1
11 | 2
NULL | 3
NULL | 4
つまり、「A=1 にマップされるものはすべて与えてください。ただし、同じ C または B を 2 回繰り返さないでください」と言いたいのです。私の実際のデータでは、10 個近くのテーブルを結合しており、結合されたすべてのテーブルのすべての順列により、結果はしばしば数千行の長さになります。
ここに同様の質問がありますConnecting Multiple Tables in SQL while Limiting Exponential Resultsですが、可能な限り内部選択を避けたいです。これは、あるべきデータベースの十分に一般的な使用法だと思います