0

このクエリを実装するロジックを考えようとしましたがmysql、何も考えられなかったり、インターネット上で何かを見つけたりすることができませんでした。私の仕事は、Join2 つ以上のテーブルを対象とし、一致するフィールドを返すことです。ただし、2 つのテーブルの行に一致する 3 つのテーブルがある場合も表示する必要があります。これらの 3 つのテーブルがあるとします。

Table1-
num |info
----------
1   |aaaaa  
2   |bbbb
3   |ccc
4   |dddd
4   |dddd
5   |eeee

Table2-
num |info
----------
2   |bbbb
3   |ccc
4   |dddd
5   |eeee

Table3-
num |info
----------
1   |aaaaa
2   |bbbb
6   |ffff
7   |gggg

これら 3 つのテーブルを結合して、次のような結果を得たいと考えています。

Result-
num |info   num |info   num |info
----------- ----------- ----------
1   |aaaaa  NULL|NULL   1   |aaaaa
2   |bbbb   2   |bbbb   2   |bbbb
3   |ccc    3   |ccc    NULL|NULL
4   |dddd   4   |dddd   NULL|NULL
4   |dddd   4   |dddd   NULL|NULL
5   |eeee   5   |eeee   NULL|NULL

3つのテーブルすべてにあることのみを示すこのクエリがあります。

   SELECT a . * , b. * , c . *
   FROM tbl_1 a
   JOIN tbl_2 b ON a.num = b.num
   JOIN tbl_3 c ON a.num = c.num
   ORDER BY a.num, b.num

しかし、私が望むのは、値が2つのテーブルに表示されていても表示することです。

どうもありがとうございました。これが解決される前に対処されていれば、私を正しい方向に向けるのに大いに役立ちます:)ありがとう

テーブル構造の更新

Table1-
num |info
----------
1   |aaaaa  
2   |bbbb
3   |ccc
3   |ccc
4   |dddd

Table2-
num |info
----------
1   |aaaaa
3   |ccc
4   |dddd
5   |eeee
6   |ffff

Table3-
num |info
----------
1   |aaaaa
6   |ffff
2   |bbbb

このようなシナリオでは、レコードは表示さ6 |ffffれません。

望ましい出力の更新

私が得たい結果は、

Result-
num |info   num |info   num |info
----------- ----------- ----------
1   |aaaaa  1   |aaaaa  1   |aaaaa
2   |bbbb   NULL|NULL   2   |bbbb
3   |ccc    3   |ccc    NULL|NULL
3   |ccc    3   |ccc    NULL|NULL
4   |dddd   4   |dddd   NULL|NULL
NULL|NULL   6   |ffff   6   |ffff
4

3 に答える 3

4
SELECT  a.*
FROM    table1 a
        INNER JOIN
        (
            SELECT num, info FROM table2
            UNION
            SELECT num, info FROM table3
        ) b ON a.num = b.NUM

SQLFiddle デモ

更新 1

SELECT  a.num numA, a.info infoA,
        b.num numB, b.info infoB,
        c.num numC, c.info infoC
FROM    table1 a
        LEFT JOIN table2 b
           ON a.num = b.num
        LEFT JOIN table3 c
           ON a.num = c.num
ORDER BY a.num

SQLFiddle デモ

于 2012-10-24T05:46:06.557 に答える
2
SELECT a . * , b. * , c . *
  FROM tbl_1 a
  LEFT JOIN tbl_2 b ON a.num = b.num
  LEFT JOIN tbl_3 c ON a.num = c.num
  ORDER BY a.num, b.num
于 2012-10-24T05:44:35.893 に答える
0

この質問は @Andreas Wederbrand によって解決されました。

3 つのテーブルの完全結合

を実装することfull joinが私のクエリの解決策でした。

この問題に遭遇した人に役立つことを願っています:)

于 2012-10-25T10:56:20.837 に答える