SQL:完全外连接(雄心勃勃的列名)

时间:2016-10-19 18:53:28

标签: mysql

我有两张桌子,t1和t2。

-- t1
id  name      address
1   Tim        A
2   Marta      B

-- t2
id  name      address
1   Tim        A
3   Katarina   C

如果我用t2进行t1全外连接

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id

但是,结果具有雄心勃勃的idnameaddress。 如何重命名,以便我没有重复的列名?

尝试:

SELECT name, address FROM

(SELECT * FROM t1
    LEFT JOIN t2 ON t1.id = t2.id
    UNION ALL
    SELECT * FROM t1
    RIGHT JOIN t2 ON t1.id = t2.id) as derived_table;

返回:错误 - 重复列名称"名称"。

2 个答案:

答案 0 :(得分:3)

抛弃SELECT列表中的*

指定要返回的表达式列表。并且使用表名限定所有列引用,或者最好是更短的表别名。

为表达式指定一个别名,这将是结果集中列的名称。

此外,显示的查询不等于FULL OUTER JOIN。

如果目标是从t1返回所有行,并且还从t2返回t1中不存在匹配行的行,我会做这样的事情......

  SELECT t.id            AS t_id
       , t.name          AS t_name
       , t.addr          AS t_addr
    FROM t1 t
   UNION ALL
  SELECT s.id
       , s.name
       , s.addr
    FROM t2 s
    LEFT
    JOIN t1 r
      ON r.id = s.id
   WHERE r.id IS NULL

答案 1 :(得分:0)

尝试完全符合条件

SELECT t1.id, t1.name, t1.address FROM t1