У меня есть базовая установка хранилища данных, которая представляет собой полицейские силы:
Каждый FACT_CRIME
имеет назначенный DIM_OFFICER
; каждый DIM_OFFICER
присваивается DIM_STATION
.
Какую SQL-логику я могу использовать для отображения всех FACT_CRIME
вместе с DIM_STATION
? Моя проблема в том, что для получения DIM_STATION
. station_code
, я знаю, что это должно быть сделано через DIM_OFFICER
, поскольку это реляционная ссылка, но я недостаточно разбираюсь в SQL, чтобы узнать, как получить данные из 2 таблиц.
Это запрос, который у меня есть до сих пор, он создает формат, который мне нужен, но не правильные результаты:
select
fact_crime.*, dim_station.station_code
from fact_crime
join dim_station
on fact_crime.assigned_officer_id
in (select dim_officer.officer_id from dim_officer where dim_officer.station_id = dim_station.station_id)
group by dim_station.station_code
Пример полученных результатов: (правильный формат, но неверные данные)
Я ожидаю появления каждого экземпляра FACT_CRIME
, причем дополнительный код офицерской станции также появляется в таблице.
Заранее благодарю всех, кто может указать мне в правильном направлении. Я все еще пытаюсь справиться с основами SQL, поэтому извиняюсь, если мне потребуются дополнительные разъяснения по любым ответам.
Вам нужны два соединения, похожие на это (я предполагаю, потому что вы не указали много деталей).
...
from fact_crime c
join dim_officer o ON c.assigned_officer_id = o.officer_id
join dim_station s ON o.station_id = s.station_id
Это очень распространенный шаблон SQL, поэтому вы найдете, что программное обеспечение MySQL делает хорошую работу, делая его эффективным.
Pro tip: Избегайте *
в SELECT *
, особенно из наборов результатов, которые являются результатом множества операций JOIN
. Вместо этого используйте SELECT
чтобы предоставить список нужных столбцов.