БД) ~ 3 МЛН строк в ней есть поле "Город" ~ 38 000 уникальных значений,
Есть файл Excel - справочник городов - 120 уникальных значений.
Как в таблице фактов оставить только те строки с городами которые содержатся в справочнике?
ничего лучше чем джойн и удаление пустых не придумал.
Посоветуйте пожалуйста как это можно сделать, или может быть подход не верный и лучше это сделать на стороне БД? (к примеру)
А чем не подходит inner join на стороне БД?
в разрезе города выбираете последнюю дату ?
на выбор влияет только город, остальные данные не влияют выбор, если город повторяется в таблице фактов несколько раз, то сохраняются все строки с этим городом. если город есть в справочнике - оставляем, если нет - удаляем.
не то чтобы не подходил, просто нет знаний в SQL , и данных справочника в базе нет, они в Excel, я могу только вручную все города вписать в запрос, так можно?
Упустил условие с файлом Эксель. Можно, только каждый раз придётся запрос переписывать. Идеальный сценарий, как по мне, затягивать справочник из Эксель в БД. Можно еще попробовать применить inner join, ц вас сейчас как понял left join используется.
я не знаю ограничений конкретно в длину запроса и количества условий, но что-то такое let Source = { "Москва", "Сант-Петербург", "Иваново", "Абакан", "Апатиты" }, textCombine = "city = '" & Text.Combine( Source, "' OR city = '" ) & "'", sqlQuery = "SELECT * FROM dict WHERE " & textCombine in sqlQuery
Спасибо, попробую решить этот вопрос на стороне БД
Если предположить, что справочник городов в Эксель меняется раз в год и вам не лениво будет подправлять запрос, то на стороне БД создать временную таблицу (или постоянную, как нравится) со списком городов. И затем делать inner join к таблице фактов.
Обсуждают сегодня