Проблема с LEFT JOIN в MySQL - PullRequest
       2

Проблема с LEFT JOIN в MySQL

0 голосов
/ 02 марта 2011

У меня есть 2 таблицы

countries:
id, name

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

stat может иметь любое из 10 значений, а type одно из 2. Country - это идентификатор страны в таблице countries.

Результаты на конкретную дату имеют не все страны.

Как создать LEFT JOIN, чтобы ВСЕ страны были указаны для КАЖДОЙ stat - type комбинации, поэтому если странане имеет результатов, тогда будет отображаться 0 (или NULL).

Я пытался SELECT * FROM dt_countries c LEFT JOIN results r ON c.id = r.country в качестве теста, но он не показывает результаты, которые я хочу.

спасибо

Ответы [ 3 ]

0 голосов
/ 02 марта 2011

У вас нет структуры таблицы для поддержки этого (или, если у вас есть, у вас нет таблицы в списке). То, что вам нужно, - это три таблицы:

  • Страны
  • Результаты
  • Результаты стран

(К сведению, таблицы 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
0 голосов
/ 02 марта 2011
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
0 голосов
/ 02 марта 2011

использование LEFT OUTER JOIN

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