我有两张table,如下:
CREATE TABLE NameWithAddress
(
Name VARCHAR(255),
Address VARCHAR(255)
);
CREATE TABLE NamesWithCountry
(
Name VARCHAR(255),
Country VARCHAR(255)
);
我想合并这两个表,因此名称上的匹配行被合并,但两个表中不匹配的行仍包含在查询中
我有一个查询返回我想要的结果:
SELECT *
FROM `NameWithAddress`
LEFT OUTER JOIN `NamesWithCountry` ON `NameWithAddress`.`Name` = `NamesWithCountry`.`Name`
UNION SELECT *
FROM `NameWithAddress`
RIGHT OUTER JOIN `NamesWithCountry` ON `NameWithAddress`.`Name` = `NamesWithCountry`.`Name`
WHERE `NameWithAddress`.`Name` IS NULL
但是当我尝试选择这个查询的结果时,我得到了一个重复的列错误。这就是我如何执行选择:
SELECT T.* FROM (
SELECT *
FROM `NameWithAddress`
LEFT OUTER JOIN `NamesWithCountry` ON `NameWithAddress`.`Name` = `NamesWithCountry`.`Name`
UNION SELECT *
FROM `NameWithAddress`
RIGHT OUTER JOIN `NamesWithCountry` ON `NameWithAddress`.`Name` = `NamesWithCountry`.`Name`
WHERE `NameWithAddress`.`Name` IS NULL) T
2条答案
按热度按时间a11xaf1n1#
您需要重命名其中一个
Name
列或忽略它们:z9smfwbn2#
通常,你会用一个
full join
,但mysql不支持FULL JOIN
. 我建议:如果您知道任何一个表中的名称都不会重复,那么:
我强烈反对使用
union
与left join
以及right join
. 这有点类似于full join
在某些情况下。但是,它比这些方法的性能更为密集,并且与实际的full join
可能很难理解(和纠正)。