#mysql #sql #csv #join #subquery
#mysql #sql #csv — файл #Присоединиться #подзапрос
Вопрос:
У меня есть большой (1000s) список идентификаторов в текстовом файле. Я хочу вернуть строки из моей базы данных, которые соответствуют этим идентификаторам. Как я могу это сделать?
Мой текущий метод заключается в том, чтобы просто вставить весь список в гигантский SQL-запрос и запустить его. Это работает, но я чувствую, что должен быть лучший способ.
Ответ №1:
Поскольку список значений становится все больше и больше, лучшим решением является загрузка его в таблицу, чтобы затем вы могли использовать его в своем запросе. В MySQL для этого подходит синтаксис load data
statement.
Рассмотрим что-то вроде:
create temporary table all_ids (id int);
load data infile 'myfile.txt' into table all_ids;
create index idx_all_ids on all_ids(id); -- for performance
select t.*
from mytable t
where exists (select 1 from all_ids a where a.id = t.id)
load data
Синтаксис допускает множество вариантов для соответствия формату входного файла — вы можете прочитать документацию для получения дополнительной информации.
Комментарии:
1. Это похоже на то, что я закончил делать, за исключением того, что я использовал объединения.