我有一个包含2个表的MySql数据库:
countries
results
id
和country name
。country_id
,value
和date
。如何创建一个列出具有特定结果的所有国家/地区的查询,但仍然列出它们,如果结果表中没有结果,则显示0?
答案 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