#mysql
Вопрос:
Я пытаюсь отфильтровать финансовые записи в таблице MySQL A на основе ограничений сопоставления, хранящихся в двух отдельных таблицах B и C , где: i. В таблице 1 указаны суммы бюджета и расходов по донорам проекта, Идентификаторы структуры разбивки работ и Год
wbs year donor budget exp
1 2019 a 10 10
2 2019 b 11 11
3 2020 c 12 12
4 2020 d 13 13
ii. В таблице 2 приведены идентификаторы проектов и идентификаторы структур разбивки работ, составляющих их
project wbs
001 1
002 2
003 3
001 4
002 5
003 6
iii. В таблице 3 указаны идентификаторы проектов и соответствующие доноры.
project donor
001 a
002 b
003 c
001 d
002 a
003 b
Я хотел бы просмотреть общие бюджеты и расходы по всем перечисленным проектам.
Я написал следующий запрос:
SELECT
`t2`.`project` AS `project`,
`t2`.`wbs` AS `wbs`,
`t1`.`year` AS `year`,
`t1`.`grant` AS `grant`,
`t1`.`funded_program_key` AS `funded_program_key`,
`t1`.`budget` AS `budget`,
`t1`.`exp` AS `exp`
FROM
`wbs_table` `t2`
LEFT JOIN `expenditure_table` `t1` ON `t2`.`wbs` = `t1`.`wbs`
LEFT JOIN `donor_table` `t3` ON `t1`.`donor` = `t3`.`donor`
WHERE `t3`.`project` = `t2`.`project`
AND `t3`.`project` IS NOT NULL
Тем не менее, цифры, похоже, отсутствуют, когда он запускается, и я, похоже, не могу понять, где я ошибаюсь.
Вот как должен выглядеть желаемый результат таблицы:
project wbs year donor budget exp
001 1 2019 a 10 10
002 2 2019 b 11 11
003 3 2020 c 12 12
Комментарии:
1. Псевдонимы
wbs_table
иexpenditure_table
совпадают ли они с запросом, который вы пытались выполнить?2. @SamuelMwamburi можете ли вы опубликовать образец того, как должен выглядеть ваш желаемый набор результатов?
3. Покажите желаемый результат для отображаемых данных.
4. Имейте в виду, что
LEFT JOIN t3 ... WHERE t3.project = ...
это то же самое, чтоINNER JOIN t3...
5. @GharbadTheWeak , пожалуйста, найдите желаемый результат в отредактированном сообщении.
Ответ №1:
Логика процесса вообще не описана.
Но, глядя на имена и значения столбцов, я предлагаю следующий запрос:
SELECT project, wbs, e.year, donor, e.budget, e.exp
FROM expenditure_table e
JOIN wbs_table w USING (wbs)
JOIN donor_table в USING (project, donor);
https://dbfiddle.uk/?rdbms=mysql_8.0amp;fiddle=0ed23d0bcee9c4dc3f12eea383c4aa79
Комментарии:
1. это действительно полезно, так как я не знал о возможности объединения таблицы с использованием двух полей одновременно, в данном случае таблицы доноров как для идентификатора проекта, так и для донора.