空时加入 (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
.
我想加入 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
.