我有2张桌子
countries:
id, name
results:
id, stat, type, country, value, date
stat
可以是10个值中的任意一个,而type
中的任意一个。Country
是countries
表中国家/地区的ID。
特定日期的结果没有所有国家/地区。
如何创建LEFT JOIN
以便为每个stat
- type
组合列出所有国家/地区,因此如果某个国家/地区没有结果,则会显示0(或NULL)
我尝试SELECT * FROM dt_countries c LEFT JOIN results r ON c.id = r.country
作为测试,但它没有显示我想要的结果。
感谢
答案 0 :(得分:0)
使用LEFT OUTER JOIN
SELECT *
FROM results r
LEFT OUTER JOIN dt_countries c
ON c.id = r.country
答案 1 :(得分:0)
您没有表格结构来支持这样做(或者,如果您这样做,则表示您没有列出表格)。您需要做的就是三张桌子:
(仅供参考,SQL表通常以单数形式命名,即Country
,Result
,CountryResult
等。)
您列出的内容仅相当于Country
和CountryResult
表。
如果您有第三张桌子,那么您可以这样做:
select
c.Name as Country,
r.Name as Result,
cr.Value as Value
from Country c
cross join Result r -- We WANT a cartesian product
left join CountryResult cr on cr.CountryId = c.CountryId and cr.ResultId = r.ResultId
答案 2 :(得分:0)
select st.stat, st.type, r.date, c.name, r.value
from
(select distinct stat, type from results) st
cross join dt_countries c
left outer join results r on
c.id = r.country and r.stat = st.stat and r.type = st.type
order by st.stat, st.type, r.date, c.name