SQL: как понять причину необходимости объединения в 2 столбца для 3 таблиц

#sql

#sql

Вопрос:

Мне сказали, что правильный способ объединить эти 3 таблицы — объединить в 2 столбца, как показано ниже:

 SELECT c.code, name, region, e.year, fertility_rate, unemployment_rate  
FROM countries AS c  
INNER JOIN populations AS p 
ON c.code = p.country_code  
INNER JOIN economies AS e  
ON p.country_code = e.code AND p.year = e.year
 

Мой вопрос связан с ошибкой, которая возникает, когда я делаю это таким образом, без «И p.year = e.year» во втором внутреннем соединении:

 SELECT c.code, name, region, e.year, fertility_rate, unemployment_rate  
FROM countries AS c  
INNER JOIN populations AS p 
ON c.code = p.country_code  
INNER JOIN economies AS e  
ON p.country_code = e.code
 

Результат:

Код Страна Регион Год Коэффициент рождаемости уровень безработицы
AFG Афганистан Южная и Центральная Азия 2015 5.746 null
AFG Афганистан Южная и Центральная Азия 2010 5.746 null
AFG Афганистан Южная и Центральная Азия 2015 4.653 null
AFG Афганистан Южная и Центральная Азия 2010 4.653 null

Мой вопрос заключается в следующем: почему я получаю повторения 2010 и 2015 годов с 2 разными значениями коэффициента рождаемости? В руководстве говорится: «Проблема с выполнением вашего последнего объединения на c.code = e.code, а также без учета года, заключается в том, что, например, значение 2010 для fertility_rate также связано со значением 2015 для unemployment_rate».

Я не понимаю объяснения и поэтому концептуально не понимаю, что здесь происходит не так…

Может кто-нибудь рассказать мне о шагах, которые предпринимает SQL?

Комментарии:

1. Пожалуйста, покажите примеры данных и желаемые результаты. Кроме того, отметьте используемую вами базу данных.

2. Концептуально вы недостаточно конкретны. Ваше выражение объединения не соответствует одной строке в одной строке. Он сопоставляет много строк со многими строками. SQL не собирается автоматически определять, какую отдельную строку вы имеете в виду, поэтому он возвращает все их комбинации. Как вы думаете, что должно возвращать это выражение?