MySQL, Фильтрует записи в таблице на основе значений в двух других отдельных таблицах

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