加入NULL(mysql)

时间:2019-04-26 00:57:45

标签: mysql sql join ifnull

我想加入2个表(表A和表B)。如果表B为NULL,则改用0。有可能在mysql中查询吗?

假设: 表A:

id        regionID 
123         1        
456         2        
789         3        

表B:

regionId Rate
0        $5
1        $10

我想要的结果是:

id        regionID rate
123         1       $10
456         2        $5
789         3        $5

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

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

但是,在我看来,“ ifnull”不会对我的查询产生任何影响

4 个答案:

答案 0 :(得分:2)

使用嵌套查询尝试此操作,首先查找匹配的内容,然后将其余内容设为空。我通常不使用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 

答案 1 :(得分:2)

检查以下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子句之后的条件是,当table_b中不存在a.regionID时,请使用b.regionID = 0

答案 2 :(得分:1)

这几乎与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

答案 3 :(得分:0)

您似乎想要:

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似乎不是必需的。