У меня вопрос в задании, которое я потратил более 40 часов, пытаясь решить. Я получаю правильный ответ, когда присоединяюсь к двум таблицам вместе, но когда я добавляю третий, я теряю строку, а счет неверен.SQL-запрос из 3 таблиц, возвращающих неверные результаты
Это находит правильный ответ:
use prime_minister_2013;
select ministry.pm_name, count(*) AS Number_times_PM, ministry.min_begin, ministry.party,deputy_pm.deputy_name
from ministry, deputy_pm
where deputy_pm.min_nr = ministry.min_nr
and ministry.party <> 'ALP'
and min_begin < '1930-01-01'
group by ministry.pm_name;
, но когда я пытаюсь добавить третью таблицу, содержащую который был генерал-губернатором, когда они избраны теряет один из рядов (ПМ) и рассчитывать на 2 строки удваиваются.
Я предполагаю, что у меня есть соединения/& или группировка неправильная!
use prime_minister_2013;
select ministry.pm_name, count(*) AS Number_times_PM, ministry.min_begin, ministry.party,deputy_pm.deputy_name, gg_title, gg_name
from ministry
join deputy_pm
on deputy_pm.min_nr = ministry.min_nr
join governor_general
on governor_general.pm_name = ministry.pm_name
and ministry.party <> 'ALP'
and min_begin < '1930-01-01'
group by ministry.pm_name;
Любое предложение с благодарностью - за счет 25/9/13
Спасибо всем за ваши комментарии - пожалуйста, найти образцы таблиц ниже:
Таблица: Министерство
min_nr pm_name party min _begin
1 Barton E Protectionist 1/01/1901
15 Bruce S M Nationalist 9/02/1923
27 Chifley J B ALP 13/07/1945
28 Chifley J B ALP 1/11/1946
9 Cook J Liberal 24/06/1913
24 Curtin J J A ALP 7/10/1941
25 Curtin J J A ALP 21/09/1943
Таблица: заместитель PM
min_nr deputy _ name party
1 Deakin A Protectionist
2 Lyne W J Protectionist
3 Hughes W M ALP
4 McLean A Protectionist
5 Isaacs I A Protectionist
6 Hughes W M ALP
7 Cook J Free Trade
8 Hughes W M ALP
9 Forrest J Liberal
Таблица: Губернатор генералами
GG_name GG_title GG _begin GG _end pm_name
Hope J A L 7th Earl of Hopetoun 1/01/1901 9/01/1903 Barton E
Tennyson H 2nd Baron Tennyson 9/01/1903 21/01/1904 Barton E
Northcote H S Baron Northcote 21/01/1904 9/09/1908 Deakin A
Ward W H 2nd Earl of Dudley 9/09/1908 31/07/1911 Deakin A
Denman T 3rd Baron Denman 31/07/1911 18/05/1914 Fisher A
Munro Ferguson, R C Rt Hon Sir 18/05/1914 6/10/1920 Cook J
Forster H W Baron Forster 6/10/1920 8/10/1925 Hughes W M
Baird J L Baron Stonehaven 8/10/1925 22/01/1931 Bruce S M
Isaacs I A Rt Hon Sir 22/01/1931 23/01/1936 Scullin J H
Hore-Ruthven A G A Brig. Gen, Baron Gowrie 23/01/1936 30/01/1945 Lyons J A
Gloucester H W F A HRH Prince, Duke of Gloucester 30/01/1945 11/03/1947 Curtin J J A
В ответ на предложения Space Dogs - я попытался это:
use prime_minister_2013;
select ministry.pm_name AS 'PM Name', DATE_FORMAT (ministry.min_begin,'%Y') As 'Ministry Started', ministry.party AS 'Party', deputy_pm.deputy_name AS 'Deputy PM Name', COUNT(DISTINCT ministry.min_begin) AS 'Number of times PM', gg_title AS 'GG Title', gg_name AS 'GG Name'
from ministry
join deputy_pm
on deputy_pm.min_nr = ministry.min_nr
join governor_general
on governor_general.pm_name = ministry.pm_name
and ministry.party <> 'ALP'
and min_begin < '1930-01-01'
group by ministry.pm_name;
Это дало мне:
который получает там, - но до сих пор отсутствует в ПМ, не имеют GG
Как выглядят таблицы/данные? – dcaswell
создать sqlfiddle plz – developerCK
Просьба предоставить образцы данных с желаемым результатом. –