MySQL中LEFT JOIN的问题

时间:2011-03-02 14:41:12

标签: mysql sql left-join

我有2张桌子

countries:
id, name

results:
id, stat, type, country, value, date

stat可以是10个值中的任意一个,而type中的任意一个。Countrycountries表中国家/地区的ID。

特定日期的结果没有所有国家/地区。

如何创建LEFT JOIN以便为每个stat - type组合列出所有国家/地区,因此如果某个国家/地区没有结果,则会显示0(或NULL)

我尝试SELECT * FROM dt_countries c LEFT JOIN results r ON c.id = r.country作为测试,但它没有显示我想要的结果。

感谢

3 个答案:

答案 0 :(得分:0)

使用LEFT OUTER JOIN

SELECT * 
FROM results r 
LEFT OUTER JOIN dt_countries c 
    ON c.id = r.country

答案 1 :(得分:0)

您没有表格结构来支持这样做(或者,如果您这样做,则表示您没有列出表格)。您需要做的就是三张桌子:

  • 国家
  • 结果
  • 国家/地区结果

(仅供参考,SQL表通常以单数形式命名,即CountryResultCountryResult等。)

您列出的内容仅相当于CountryCountryResult表。

如果您有第三张桌子,那么您可以这样做:

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