我将大量表连接在一起,我想在company2city表中计算公司的编号城市,同时将其链接到company表中的一行,然后找出结束时间是否比现在还长。 company2city是与city表链接在一起的多对多表。一个公司可以有很多城市,并且在company2city表中。

SELECT COUNT(company2city.cityid) as location, city.city
FROM company
INNER JOIN company2city ON company.id = company2city.companyid
INNER JOIN city ON company2city.cityid = city.id AND company.endtime > now()
GROUP BY company2city.cityid


该选择语句有效,但仅在company2.endtime大于now()时选择在company2city表中具有实例的城市。我想要的是也选择城市表中的所有城市,如果company.endtime()> now()失败,它将仅将COUNT(company2city.cityid)设置为location = 0

我该如何做这样的选择陈述?

最佳答案

我相信您想要的是左联接而不是内部联接。无论如何,左联接都会联接,如果无法联接则返回null。

尝试这个

SELECT COUNT(company2city.cityid) as location, city.city
FROM city
LEFT JOIN company2city on city.id = company2city.cityid
LEFT JOIN company on company.id = company2city.companyid
where company.endtime > now()
group by city.city

10-05 21:08