Mysql 如何将这些表连接在一起?

Mysql 如何将这些表连接在一起?,mysql,sql,Mysql,Sql,我将大量的表连接在一起,我想在Company2 city表中计算一家公司的编号city,同时将其链接到company表中的一行,然后找出endtime是否大于现在。。Company2 city是一个多对多表,与city表链接在一起。一个公司可以有许多城市,它位于Company2城市表中 SELECT COUNT(company2city.cityid) as location, city.city FROM company INNER JOIN company2city ON company

我将大量的表连接在一起,我想在Company2 city表中计算一家公司的编号city,同时将其链接到company表中的一行,然后找出endtime是否大于现在。。Company2 city是一个多对多表,与city表链接在一起。一个公司可以有许多城市,它位于Company2城市表中

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
该select语句有效,但它仅选择在company2city表中具有实例的城市,并且如果company.endtime大于now()。我想要的是还选择city表中的所有城市,如果company.endtime()>now()失败,它只会将计数(company2city.cityid)设为location=0


我该如何执行这样的select语句呢?

我相信您需要的是左连接而不是内部连接。左连接不考虑连接,并在无法进行连接时返回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

我相信你想要的是左连接而不是内部连接。左连接不考虑连接,并在无法进行连接时返回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

我想大概是

  SELECT COALESCE (COUNT (company2city.cityid), NULL) AS location, city.city
    FROM company
         LEFT JOIN company2city
            ON company.id = company2city.companyid
         LEFT JOIN city
            ON company2city.cityid = city.id AND company.endtime > now ()
GROUP BY company2city.cityid

应该对你有用。我从来没有在select和MYSQL中尝试过coalece,但我知道它可以在Oracle中使用。但关键是使用左连接,而不是内部连接。

我认为有些东西与

  SELECT COALESCE (COUNT (company2city.cityid), NULL) AS location, city.city
    FROM company
         LEFT JOIN company2city
            ON company.id = company2city.companyid
         LEFT JOIN city
            ON company2city.cityid = city.id AND company.endtime > now ()
GROUP BY company2city.cityid

应该对你有用。我从来没有在select和MYSQL中尝试过coalece,但我知道它可以在Oracle中使用。但关键是使用左连接而不是内部连接。

不幸的是,它没有返回nulls@Kevin我更改了group by语句,请立即尝试。您说它不返回空值。它应该返回0作为计数,在那里它将为null。这就是你的意思,对吗?它不是返回0,只是返回计数大于0?我只是想理解,因为这对我来说是一个类似的查询。是的,它返回的计数大于0,但没有返回0。我想我会选择2 select语句。幸运的是,它没有返回nulls@Kevin我通过声明改变了小组,请现在试试你说它不会返回空值。它应该返回0作为计数,在那里它将为null。这就是你的意思,对吗?它不是返回0,只是返回计数大于0?我只是想理解,因为这对我来说是一个类似的查询。是的,它返回的计数大于0,但没有返回0。我想我会选择2个select语句。事实上,你从来没有使用过COALESCE可能解释了你在这里使用它的方式,这实际上毫无意义。但也许你的意思不同。我建议您解释一下解决方案背后的想法,也许有人会建议进行必要的更正。您从未使用过COALESCE这一事实可能解释了您在这里使用它的方式,这实际上毫无意义。但也许你的意思不同。我建议您解释一下解决方案背后的想法,也许有人会建议进行必要的纠正。