我正在尝试进行一个查询,该查询始终显示表的所有行,但是如果where子句不匹配,则为a列提供默认值。
我有一个服务表,它与房屋表之间存在N到N的关系。在中间表中,我有idHouse,idService,active列。
例如,我有这个:
服务:
id, name
1, a
2, b
3, c
4, d
房子:
id
1
2
house_has_service:
idService, idHouse, active
1, 1, 1
1, 2, 1
4, 2, 1
我尝试了子查询和所有类型的联接,但无法解决问题。这是我的第一次尝试。
select
s.idService id, s.name name, IFNULL(v.active, 0) active
from house_has_service v
right join service s on s.id = v.idService
where
v.idHouse is null or v.idHouse = (houseId)
order by s.id
(houseId)是我传递的变量
我想要的结果应如下所示:
房屋编号= 1
id, name, active
1, a, 1
2, b, 0
3, c, 0
4, d, 0
houseid = 2
id, name, active
1, a, 1
2, b, 0
3, c, 0
4, d, 1
houseid = 3
id, name, active
1, a, 0
2, b, 0
3, c, 0
4, d, 0
答案 0 :(得分:1)
SELECT s.id,
s.name,
COALESCE(hhs.active, 0) AS active
FROM service s
LEFT JOIN house_has_service hhs
ON s.id = hhs.idService
AND hhs.idHouse = @houseID
ORDER BY s.id;