Базовое хранилище данных - Как объединить данные на 2 таблицы

0

У меня есть базовая установка хранилища данных, которая представляет собой полицейские силы: Изображение 174551

Каждый 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

Пример полученных результатов: (правильный формат, но неверные данные) Изображение 174551

Я ожидаю появления каждого экземпляра FACT_CRIME, причем дополнительный код офицерской станции также появляется в таблице.

Заранее благодарю всех, кто может указать мне в правильном направлении. Я все еще пытаюсь справиться с основами SQL, поэтому извиняюсь, если мне потребуются дополнительные разъяснения по любым ответам.

Теги:
join
data-warehouse

1 ответ

4
Лучший ответ

Вам нужны два соединения, похожие на это (я предполагаю, потому что вы не указали много деталей).

...
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 чтобы предоставить список нужных столбцов.

  • 0
    Большое спасибо за то, что указали мне правильное направление - похоже, это дает правильные результаты! Не могли бы вы объяснить, чем двойное соединение отличается от вложенного оператора выбора ON +?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню