#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 не собирается автоматически определять, какую отдельную строку вы имеете в виду, поэтому он возвращает все их комбинации. Как вы думаете, что должно возвращать это выражение?