Я недавно изучал MySQL и SQL, но я вынужден работать с MS Access.Я имел большой успех в настройке и создании запросов с моими знаниями SQL, но теперь я застрял.Я все еще пытаюсь узнать больше о правильном объединении таблиц в запросах, и, исходя из своего опыта, MS Access не делает это проще.
У меня есть 5 таблиц, которые я пытаюсь сделать запрос.Table1 (он же munic для munic.ID) - это таблица, содержащая ключ, который связывает имя со следующими 4 таблицами.Все таблицы 2-4 содержат несколько уникальных записей, которые связаны с одной записью в таблице 1.Когда я запрашиваю каждую таблицу как пару с таблицей 1, я получаю именно те результаты, которые мне нужны.Тем не менее, когда я пытаюсь сделать запрос к таблицам 1-4 вместе, я получаю в 4 раза больше записей (как, например, записи в таблице 2 появляются в любом месте от 3 до 6 раз в результирующей электронной таблице).Это также проблематично, потому что я пытаюсь найти сумму для значений данных в таблицах 2-4, и при 4-кратном увеличении записей мои суммы увеличиваются в 4 раза.
Примечание: четного числа записей нетдля каждой таблицы, связанной с ключом в таблице 1 (в таблице 2 содержится 35 записей, в таблице 3 - 12 и т. д. и т. д.)
Пример данных:
Table1
ID municipalities county population website
1 Anson Somerset 2452 ansonmaine.town
2 Arrowsic Sagadahoc 440 arrowsic.org/recycling
Table2
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 45 1 2017 594 0 Maine
2 28 1 2017 4 Maine
Итак, вот запросы, которые яработаю над: Запрос с 2 таблицами, предоставляет точные результаты (добро!)
SELECT DISTINCT
Table1.municipalities,
Table2.[report-year],
Sum(Table2.tons) AS [disp-tons],
Sum(Table2.[cubic-yards]) AS [disp-cubic-yards], Count(Table2.ID) AS [disp-no-entries]
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.[munic-ID]
GROUP BY Table1.municipalities, Table2.[report-year];
Запрос со всеми таблицами (предоставляет слишком много дубликатов, это больно):
SELECT DISTINCT
Table1.municipalities,
[Table2.tons] AS Table2_tons,
Table2.[cubic-yards] AS [Table2_cubic-yards],
Table3.tons AS Table3_tons,
Table3.[cubic-yards] AS [Table3_cubic-yards],
Table4.tons AS Table4_tons,
Table4.[cubic-yards] AS [Table4_cubic-yards],
[Table5].tons AS [Table5_tons],
[Table5].[cubic-yards] AS [Table5_cubic-yards]
FROM (((Table1 LEFT JOIN Table3 ON Table1.[ID] = Table3.[munic-ID]) LEFT JOIN Table2 ON Table1.[ID] = Table2.[munic-ID]) LEFT JOIN Table4 ON Table1.[ID] = Table4.[munic-ID]) LEFT JOIN [Table5] ON Table1.[ID] = [Table5].[munic-ID]
ORDER BY Table1.municipalities;
Если есть какой-либо совет о том, как сделать так, чтобы, когда я запрашиваю Table1.municipality и присоединяюсь к Table1 ID, я не получаю повторяющихся записей, это было бы очень полезно.Я попытался сгруппировать данные в своем запросе, но MS требует, чтобы ВСЕ было сгруппировано, а не только одно поле.Я также сделал математику, и когда я пытаюсь суммировать свои значения, как я выбираю их, я получаю примерно в 4 раза больше, чем должно быть.
Ожидаемый результат:
municipalities recycle_tons recycle_cubic-yards disposal_tons disposal_cubic-yards reuse_tons reuse_cubic-yards ben-use_tons ben-use_cubic-yards
Anson 2017 114 2 598 0 0 0 0 0
Anson 2016 66 3 946 0 0 0 0 0
Arrowsic 2017 59 0 121 0 0 0 23 0
Arrowsic 2016 0 0 121 0 0 0 23 0
Auburn 2016 0 0 21428 0 0 0 1538 0
Фактический результат:
municipalities report-year recycle_tons recycle_cubic-yards disposal_tons disposal_cubic-yards reuse_tons reuse_cubic-yards ben-use_tons ben-use_cubic-yards
Anson 2016 1 34
Anson 2016 1 157
Anson 2016 1 755
Anson 2016 3 34
Anson 2016 3 157
Anson 2016 3 755
Anson 2016 21 34
Anson 2016 21 157
Anson 2016 21 755
Anson 2016 43 34
Anson 2016 43 157
Anson 2016 43 755
Anson 2016 46 34
Anson 2016 46 157
Anson 2016 46 755
Anson 2017 1 4
Anson 2017 1 594
Anson 2017 3 4
Anson 2017 3 594
Anson 2017 21 4
Anson 2017 21 594
Anson 2017 43 4
Anson 2017 43 594
Anson 2017 46 4
Anson 2017 46 594
Arrowsic 2016 0 121 8
Надеюсь, кто-то может помочь!Мне не терпится узнать, как правильно составлять запросы, поскольку мне часто приходится собирать огромное количество данных из нескольких нелогично спроектированных баз данных MS Access (я унаследовал их от предшественника).
ОБНОВЛЕНИЕНиже приведены примеры моих 5 таблиц, для которых я пытаюсь объединить записи (не как строки, но каждую таблицу следует добавлять как новые столбцы - но для каждой таблицы существует неравное количество записей)
TABLE1:
ID municipalities county population website
1 Anson Somerset 2452 ansonmaine.town
2 Arrowsic Sagadahoc 440 arrowsic.org/recycling
3 Auburn Androscoggin 23000 auburnmaine.gov
TABLE2:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
10 1 2 2017 59 Maine
11 20 2 2017 0 Maine
12 21 2 2017 0 Maine
TABLE3:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 45 1 2017 594 0 Maine
2 28 1 2017 4 Maine
3 45 2 2017 121 Maine
TABLE4:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 39 9 2017 280 Maine
2 39 12 2017 74 Maine
3 39 18 2017 3 Maine
TABLE5:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 29 7 2017 10 0 Maine
4 7 12 2017 25 Maine
5 35 15 2017 208 Maine