空时加入 (mysql)

JOIN WHEN NULL (mysql)

我想加入 2 tables,(table A 和 table B)。如果 table B 为 NULL,则使用 0 代替。可以在 mysql 中查询吗?

假设: Table答:

id        regionID 
123         1        
456         2        
789         3        

Table乙:

regionId Rate
0        
1        

我想要的结果是:

id        regionID rate
123         1       
456         2        
789         3        

我在连接中的查询基本上是这样的:

Table_a a LEFT join table_b b
ON a.region_id = IFNULL(b.region_id,0)

但是,在我看来 "ifnull" 对我的查询没有任何影响

您似乎想要:

select a.companyID, a.regionID, a.status, b.rate
from table_a a left join
     table_b b
     on a.company_id = b.company_id;

region 似乎对您的 join 没有必要。

尝试使用嵌套查询首先找到匹配的内容,然后将其余的设为空。我通常不使用 mySQL,所以我的语法可能不正确。

select t.regionID, b.Rate
from 
(select a.regionID, b.regionID as 'b_region'
 from table_a a 
 left join table_b b
      on a.regionID = b.regionID) t
left join table_b b
     on IFNULL(t.b_region, 0) = b.regionID 

这个和Michael Z差不多。解法:

SELECT r.ID,r.Region_ID,b.Rate FROM
(SELECT a.ID,a.Region_ID,ifnull(b.region_id,0) AS bRegID 
FROM table_a a 
LEFT JOIN table_b b 
on a.region_id=b.region_id) r
LEFT JOIN table_b b ON r.bregid=b.region_ID
Order by r.Region_ID;

这里是fiddle:Fiddle

检查以下 SQL 是否适合您:

SELECT a.id
,      a.regionID
,      b.rate
FROM table_a a 
LEFT JOIN table_b b ON a.regionID = b.regionID 
    OR (b.regionID = 0 AND not EXISTS (select * from table_b b1 where b1.regionID = a.regionID))
order by a.id

注意: OR 子句后的条件表示当 a.regionID 不存在于 table_b 中时,则使用 b.regionID = 0 .