如果where语句不匹配,如何显示表的所有行但具有默认值

时间:2019-02-07 17:32:41

标签: mysql

我正在尝试进行一个查询,该查询始终显示表的所有行,但是如果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  

1 个答案:

答案 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;