MySQL: FULL OUTER JOIN - Как объединить один столбец?
У меня есть вопрос, касающийся полного внешнего соединения в MySQL. У меня есть две (или более таблицы):
table1 table2
id value id value2
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
Моя проблема в том, что мне не удается одновременно свернуть два столбца идентификатора в один столбец, чтобы получить это:
id value1 value2
1 a b
2 c NULL
3 e d
4 NULL f
Любые предложения о том, как это сделать?
Ответы
Ответ 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');
Изменить: Фиксированная строка выше
Ответ 2
SELECT
COALESCE(t1.id, t2.id) as id,
t1.value1,
t2.value2
FROM table1 t1
FULL JOIN table2 t2 ON t1.id = t2.id;
Ответ 3
Для того, что я думаю, что вы пытаетесь сделать, я бы предложил вместо этого использовать FULL OUTER JOIN:
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