MySQL:FULL OUTER JOIN - 如何合并一列?
Posted
技术标签:
【中文标题】MySQL:FULL OUTER JOIN - 如何合并一列?【英文标题】:MySQL: FULL OUTER JOIN - How do I merge one column? 【发布时间】:2011-05-23 20:11:04 【问题描述】:我有一个关于 mysql 中的 FULL OUTER JOIN 的问题。我有两张(或更多张桌子):
表 1 表 2 id 值 id 值2 1个1个 2 天 3 天 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`
得到:
标识值 1 标识值 2 1个1个 2 c 空空 3 天 3 天 NULL NULL 4 f我的问题是我无法同时将两个 id 列折叠成一列来得到这个:
id 值1 值2 1个 2 c 空 3 天 4 空 f有什么建议吗?
【问题讨论】:
【参考方案1】:SELECT
COALESCE(t1.id, t2.id) as id,
t1.value1,
t2.value2
FROM table1 t1
FULL JOIN table2 t2 ON t1.id = t2.id;
【讨论】:
同意.. COALESCE 就是我想要的! 简短而完美的答案!【参考方案2】:用途:
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');
编辑:上面的固定线
【讨论】:
非常感谢您提供的非常迅速和有用的回答。这完全解决了我的问题。 如果我必须在 sqlite 上执行此操作怎么办。它支持左连接?【参考方案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
【讨论】:
这将返回 1064 - 语法错误,因为 MySQL 不支持 FULL OUTER JOIN - 这就是 OP 不使用它的原因。 正如 OMG Ponies 所说,不幸的是 MySQL 不支持 FULL OUTER JOIN 语法,它必须通过不同的方式进行模拟。我发现这很有帮助:xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql以上是关于MySQL:FULL OUTER JOIN - 如何合并一列?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 MySQL 会在 FULL OUTER JOIN 上报告语法错误?
如何在 MySQL 中进行 FULL OUTER JOIN?
如何在 MySQL 中进行 FULL OUTER JOIN?
如何在 MySQL 中进行 FULL OUTER JOIN?