我想加入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”不会对我的查询产生任何影响
答案 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
似乎不是必需的。