Mysql 从2表中获取Join reulst,当值不存在时,使用空值填充其中任何一个
我有表Mysql 从2表中获取Join reulst,当值不存在时,使用空值填充其中任何一个,mysql,sql,Mysql,Sql,我有表客户和合作伙伴 company_id | name ------------------ 11 | UA prods. 12 | CI corp. 20 | BDP Group 30 | UFF 表客户端 company_id | name ------------------ 11 | UA prods. 12 | CI corp. 13 | UAC 表合作伙伴 co
客户
和合作伙伴
company_id | name
------------------
11 | UA prods.
12 | CI corp.
20 | BDP Group
30 | UFF
表客户端
company_id | name
------------------
11 | UA prods.
12 | CI corp.
13 | UAC
表合作伙伴
company_id | name
------------------
11 | UA prods.
12 | CI corp.
20 | BDP Group
30 | UFF
我需要从两个表中获取所有公司名称。当两个表中都有公司时,它们的名称就不存在了,如果不存在,就把它留空
我尝试了左连接,内连接,但它没有给我想要的
我想要这样的结果
clients | partners
--------------------
UA prods. | UA prods.
CI corp. | CI corp.
UAC |
| BDP Group
| UFF
使用以下命令:
(select clients.name as clients, partners.name as partners from clients
LEFT JOIN partners
ON clients.company_id = partners.company_id)
UNION ALL
(select clients.name as clients, partners.name as partners from partners
LEFT JOIN clients
ON clients.company_id = partners.company_id
WHERE clients.company_id IS NULL)
您正在寻找MySQL不支持的完整外部联接。但您可以使用左连接和右连接,以及UNION ALL查询:
select c.name as clients, p.name as partners
from
clients c left join partners p
on c.company_id = p.company_id
union all
select c.name as clients, p.name as partners
from
clients c right join partners p
on c.company_id = p.company_id
where
c.company_id is null
第一个查询使用左连接,只要存在匹配项(或null),它将返回所有客户机和所有合作伙伴
第二个右连接查询将返回在clients表上没有匹配项的所有合作伙伴。您将在union的帮助下,通过两个连接的组合获得此结果,如下所示
SELECT t1.c_name,t2.p_name
FROM clients t1
LEFT JOIN partners t2 ON t1.c_id = t2.p_id
UNION
SELECT t4.c_name,t3.p_name
FROM partners t3
LEFT JOIN clients t4 ON t3.p_id = t4.c_id
where t4.c_name is null
如果您有任何问题,请告诉我…因此,基本上,您正在寻找的最佳解决方案是
完全外部连接,这是MySQL不支持的
因此,在mysql中,您可以通过以下查询执行相同的操作-
SELECT clients.name AS clients, partners.name AS partners FROM clients
LEFT JOIN partners ON clients.company_id = partners.company_id
UNION
SELECT clients.name AS clients, partners.name AS partners FROM clients
RIGHT JOIN partners ON clients.company_id = partners.company_id
注意:不要使用UNION ALL
,它会给您这样的结果-
clients | partners
-----------------------------------
UA prods. | UA prods.
CI corp. | CI corp.
UAC | NULL
UA prods. | UA prods.
CI corp. | CI corp.
NULL | BDP Group
NULL | UFF
非常感谢您(不客气)@OtoShavadze您应该使用union而不是union,这将加快查询速度并获得结果fast@AnkitAgrawal如果OP在客户机
表中有2行(11,'UA prods.'),并且OP希望获得这两行,该怎么办?@SunnyBatabyal请不要尝试更新。正如您在编辑尝试中所说,此查询不会提供不必要的重复项