即使结果不存在,MYSQL也会显示0

时间:2011-03-02 10:51:29

标签: mysql sql

我有一个包含2个表的MySql数据库:

countries
results
  • 国家/地区只有idcountry name
  • 结果为country_idvaluedate
  • 并非所有国家/地区都会在每个日期都有结果。

如何创建一个列出具有特定结果的所有国家/地区的查询,但仍然列出它们,如果结果表中没有结果,则显示0?

4 个答案:

答案 0 :(得分:7)

在两个表之间使用LEFT JOIN

select c.id, c.name, IFNULL(r.value, 0) value, r.date
from countries c
LEFT JOIN results r on r.country_id = c.id

要显示0(对于value列),如果没有结果,请使用IFNULL

答案 1 :(得分:0)

您要找的是LEFT JOIN。看看this page或者向谷歌寻求一个简单的例子。有关更多信息,请查看mysql documentation

答案 2 :(得分:0)

通过以下查询,您将获取所有已分配结果的国家/地区。

   SELECT *
     FROM countries AS c
LEFT JOIN results AS r
       ON r.country_id = c.id

如果没有为某些国家/地区分配值,则会有null个值,根据这些值,您会知道应显示0

答案 3 :(得分:0)

如果您想考虑results表中存储的所有日期并列出所有这些日期的所有国家/地区,请相应地将results.value替换为0,然后你可能需要做这样的事情:

SELECT
  c.id,
  IFNULL(r.value, 0) AS value,
  r.date
FROM countries c
  CROSS JOIN (SELECT DISTINCT date FROM results) d
  LEFT JOIN results r ON c.id = r.country_id AND d.date = r.date