30

MySQLの完全外部結合について質問があります。2つ(またはそれ以上)のテーブルがあります:

table1 table2
id値id値2
1 a 1 b
2 c 3 d
3 e 4 f

私はこのクエリを使用して参加しました:

SELECT * 
FROM table1
LEFT OUTER JOIN table2
ON table1.`id`=table2.`id`
UNION
SELECT * 
FROM table1
RIGHT OUTER JOIN table2
ON table1.`id`=table2.`id`

取得するため:

id value1 id value2
1 a 1 b
2 c NULL NULL
3 e 3 d
NULL NULL 4 f

私の問題は、これを取得するために2つのid列を同時に1つの列に折りたたむことができないことです。

id value1 value2
1 ab
2 c NULL
3版
4 NULL f

それを行う方法について何か提案はありますか?

4

3 に答える 3

62
SELECT 
COALESCE(t1.id, t2.id) as id,
t1.value1,
t2.value2
FROM table1 t1
FULL JOIN table2 t2 ON t1.id = t2.id;
于 2015-01-21T20:21:42.983 に答える
13

使用する:

    SELECT t1.id,
           t1.value,
           t2.value2 
      FROM table1 t1
 LEFT JOIN table2 t2 ON t2.id = t1.id
UNION
    SELECT t2.id,
           t1.value,
           t2.value2
      FROM TABLE1 t1
RIGHT JOIN TABLE2 t2 ON t2.id = t1.id

オペレーターは行/レコードのUNION重複を削除するため、列を適切に定義/リストする必要があります。

スクリプト:

DROP TABLE IF EXISTS `example`.`table1`;
CREATE TABLE  `example`.`table1` (
  `id` int(10) unsigned NOT NULL default '0',
  `value` varchar(45) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO table1 VALUES (1, 'a'), (2, 'c'), (3, 'e');

DROP TABLE IF EXISTS `example`.`table2`;
CREATE TABLE  `example`.`table2` (
  `id` int(10) unsigned NOT NULL default '0',
  `value2` varchar(45) NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO table2 VALUES (1, 'b'), (3, 'd'), (4, 'f');

編集:上の固定行

于 2010-12-11T04:05:41.913 に答える
-1

あなたがやろうとしていることについては、代わりにFULLOUTERJOINを使用することをお勧めします。

SELECT ISNULL(t1.id, t2.id) AS id, t1.value1, t2.value2
FROM table1 t1
FULL OUTER JOIN table2 t2 ON t1.id = t2.id
于 2010-12-11T04:25:32.543 に答える