209 похожих чатов

Добрый день, прошу помочь с такой задачей: Есть таблица фактов (источник

БД) ~ 3 МЛН строк в ней есть поле "Город" ~ 38 000 уникальных значений,
Есть файл Excel - справочник городов - 120 уникальных значений.

Как в таблице фактов оставить только те строки с городами которые содержатся в справочнике?

ничего лучше чем джойн и удаление пустых не придумал.

Посоветуйте пожалуйста как это можно сделать, или может быть подход не верный и лучше это сделать на стороне БД? (к примеру)

8 ответов

17 просмотров

А чем не подходит inner join на стороне БД?

в разрезе города выбираете последнюю дату ?

Andrey Igoshev- Автор вопроса
Andrey Kozlenok
в разрезе города выбираете последнюю дату ?

на выбор влияет только город, остальные данные не влияют выбор, если город повторяется в таблице фактов несколько раз, то сохраняются все строки с этим городом. если город есть в справочнике - оставляем, если нет - удаляем.

Andrey Igoshev- Автор вопроса
Artem
А чем не подходит inner join на стороне БД?

не то чтобы не подходил, просто нет знаний в SQL , и данных справочника в базе нет, они в Excel, я могу только вручную все города вписать в запрос, так можно?

Andrey Igoshev
не то чтобы не подходил, просто нет знаний в SQL ,...

Упустил условие с файлом Эксель. Можно, только каждый раз придётся запрос переписывать. Идеальный сценарий, как по мне, затягивать справочник из Эксель в БД. Можно еще попробовать применить inner join, ц вас сейчас как понял left join используется.

Andrey Igoshev
не то чтобы не подходил, просто нет знаний в SQL ,...

я не знаю ограничений конкретно в длину запроса и количества условий, но что-то такое let Source = { "Москва", "Сант-Петербург", "Иваново", "Абакан", "Апатиты" }, textCombine = "city = '" & Text.Combine( Source, "' OR city = '" ) & "'", sqlQuery = "SELECT * FROM dict WHERE " & textCombine in sqlQuery

Andrey Igoshev- Автор вопроса

Спасибо, попробую решить этот вопрос на стороне БД

Andrey Igoshev
Спасибо, попробую решить этот вопрос на стороне БД

Если предположить, что справочник городов в Эксель меняется раз в год и вам не лениво будет подправлять запрос, то на стороне БД создать временную таблицу (или постоянную, как нравится) со списком городов. И затем делать inner join к таблице фактов.

Похожие вопросы

Обсуждают сегодня

Карта сайта