Получить подмножество строк на основе списка первичных ключей в файле

#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. Это похоже на то, что я закончил делать, за исключением того, что я использовал объединения.