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?

MySQL:FULL OUTER JOIN - 如何合并一列?

在 MySQL 中执行 FULL OUTER JOIN 查询时出错 [重复]