2

私は2つのテーブルを持っています:

Table1
id | col1 | col2 | other_id
---------------------------
1  | val1 | val2 | 2
2  | val3 | val4 | 3

Table2
id | col3 | other_id
--------------------
1  | val5 | 4

この 2 つのテーブルを次のように結合します。

id | col1 | col2 | col3 | other_id
-----------------------------------
1  | val1 | val2 | NULL | 2
2  | val3 | val4 | NULL | 3
1  | NULL | NULL | val5 | 4

この SQL クエリを作成します。

(
SELECT * FROM table1 AS M LEFT JOIN table2 AS D ON M.other_id = D.other_id
)
UNION
(
SELECT * FROM table1 AS M RIGHT JOIN table2 AS D ON M.other_id = D.other_id
)

結果:

id   | col1 | col2 | other_id | id   | col3 | other_id
------------------------------------------------------
1    | val1 | val2 | 2        | NULL | NULL | NULL
2    | val3 | val4 | 3        | NULL | NULL | NULL
NULL | NULL | NULL | NULL     | 1    | val5 | 4

しかし、同じラベルの列が複数あります。エイリアスを使用したくありません。同じ名前の列を結合するだけです。

4

4 に答える 4

2

これを使用UNION ALLして、両方のテーブルに存在しない列のプレースホルダーを配置するだけです。

select t1.id, t1.col1, t1.col2, null col3, t1.other_id
from table1 t1
union all
select t2.id, null col1, null col2, t2.col3, t2.other_id
from table2 t2

デモで SQL Fiddle を参照してください

結果:

| ID |   COL1 |   COL2 |   COL3 | OTHER_ID |
--------------------------------------------
|  1 |   val1 |   val2 | (null) |        2 |
|  2 |   val3 |   val4 | (null) |        3 |
|  1 | (null) | (null) |   val5 |        4 |
于 2012-11-28T12:16:57.253 に答える
2

aliasを使用せずにこれを実現したい場合は、各列を手動で使用する必要があります。

(SELECT M.ID,M.Col1,M.Col2,D.Col3,M.Other_ID 
   FROM table1 AS M 
   LEFT JOIN table2 AS D 
   ON M.other_id = D.other_id)
UNION
(SELECT D.ID,M.Col1,M.Col2,D.Col3,D.Other_ID 
   FROM table1 AS M 
   RIGHT JOIN table2 AS D 
   ON M.other_id = D.other_id);

このSQLFiddleを参照してください

結果

| ID |   COL1 |   COL2 |   COL3 | OTHER_ID |
--------------------------------------------
|  1 |   val1 |   val2 | (null) |        2 |
|  2 |   val3 |   val4 | (null) |        3 |
|  1 | (null) | (null) |   val5 |        4 |
于 2012-11-28T12:22:52.987 に答える
1
SELECT id, col1, col2, ''  col3, other_id
FROM table1 

UNION

SELECT id, '' col1 , '' col2, col3, other_id 
FROM table2
于 2012-11-28T12:16:05.243 に答える
-1

Unionは、テーブルに同じフィールドがあることを望んでいます。あなたはそれをするために「人工」フィールドを置くことができます

于 2012-11-28T12:09:58.760 に答える