13

2 つのテーブル (tbl1 と tbl2) を結合しています。左結合は、tbl2 または tbl1 のみにある tbl1 からのすべてのデータを提供します。右結合は、tbl1 に存在しない tbl2 からのデータを提供します。

両方の結果を組み合わせたい。

tbl1 と tbl2 からすべてのデータを取得するには、これを行う最善の方法は何ですか?

4

4 に答える 4

20

それを行うことができるのは、を使用することだけですUNIONFULL JOINMySQL は、MSSQL のようにサポートしていません。

SELECT * 
FROM tbl1 t1 
       LEFT JOIN tbl2 t2
          ON t1.col = t2.col
UNION 
SELECT * 
FROM tbl1 t1 
       RIGHT JOIN tbl2 t2 
          ON t1.col>= t2.<col

こちらをご覧ください: MYSQL での FULL JOIN のシミュレート

ちなみに、 にUNIONはオプションのキーワードALLがあり、ALLを省略すると、結果セットからUNION自動的にDISTINCT行が選択されます。

例:

SELECT *
FROM   tableA
UNION ALL
SELECT *
FROM   tableA

これにより、行が重複する可能性があります

ColA    ColB
==================
1       John
2       Jade
2       Jade
3       Hello

しかし、単語を省略した場合ALL

SELECT *
FROM   tableA
UNION
SELECT *
FROM   tableA

これにより、個別の行のみが生成される可能性があります

ColA    ColB
==================
1       John
2       Jade
3       Hello
于 2012-08-11T08:26:38.370 に答える
8

あなたが欲しいのはFULL JOIN

LEFT JOIN+ RIGHT JOIN=FULL JOIN

だからこれを試してみてください:

SELECT * FROM tbl1
LEFT JOIN tbl2 ON tbl1.id = tbl2.id
UNION
SELECT * FROM tbl1
RIGHT JOIN tbl2 ON tbl1.id = tbl2.id

このUNION句は、2つのSQLクエリの結果を、一致するすべての行の1つのテーブルに結合します。

于 2012-08-11T07:36:49.477 に答える
2

3 つ以上のテーブルの完全結合がある場合に簡単に拡張できる別の方法を次に示します。

SELECT t1*, t2.* 
FROM 
    ( SELECT col
      FROM tbl1
    UNION
      SELECT col
      FROM tbl2
    ) AS d
  LEFT JOIN tbl1 AS t1 
    ON t1.col = d.col
  LEFT JOIN tbl2 AS t2
    ON t2.col = d.col ;
于 2012-08-11T09:14:32.713 に答える
1

FULL OUTER JOINを使用する必要がありますが、mysqlはそれをサポートしていません。結果を得るためにこれを行うことができます。

 SELECT * 
FROM tbl1 t1 LEFT JOIN tbl2 t2
ON t1.<col> = t2.<col>
UNION 
SELECT * 
FROM tbl1 t1 RIGHT JOIN tbl2 t2 
ON t1.<col>= t2.<col> 
于 2012-08-11T07:37:33.413 に答える