Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从2表中获取Join reulst,当值不存在时,使用空值填充其中任何一个_Mysql_Sql - Fatal编程技术网

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请不要尝试更新。正如您在编辑尝试中所说,此查询不会提供不必要的重复项