我有两张桌子,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
但是,结果具有雄心勃勃的id
,name
,address
。
如何重命名,以便我没有重复的列名?
尝试:
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;
返回:错误 - 重复列名称"名称"。
答案 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