一尘不染

MySQL:完全外部联接-如何合并一列?

mysql

我对MySQL中的FULL OUTER JOIN有疑问。我有两个(或更多表):

table1 table2
ID值ID值2
1 a 1 b
2 c 3 d
3 e 4楼

我已经使用此查询来加入我的行列:

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值1 ID值2 
1 a 1 b
2 c NULL NULL
3天3天
NULL NULL 4 f

我的问题是,我无法同时将两个id列折叠为一列来获取此信息:

id value1 value2 
1磅
2 c空
3版
4 NULL f

有什么建议吗?


阅读 334

收藏
2020-05-17

共1个答案

一尘不染

采用:

    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');

编辑:上面的固定线

2020-05-17