Альтернатива в операторе в MySQL

В операторе я вижу альтернативу в MySQL

У меня почти 25,000 Идентификаторы. Я использую in Оператор на этом. Затем я получаю Stackru Exception. Есть ли другая альтернатива для оператора IN в MySQL.

Заранее спасибо..

2 ответа

Решение

Если идентификаторы находятся в другой таблице:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

тогда вы можете использовать соединение вместо:

SELECT table1.* FROM table1 INNER JOIN table2 ON table1.id = table2.id;

Вы можете сделать следующее:

1 - Создать временную таблицу MySQL

CREATE TEMPORARY TABLE tempIdTable (id int unsigned not null primary key);

2 - Вставьте все свои идентификаторы во временную таблицу

Для каждого идентификатора в вашем списке:

insert ignore into myId (id) values (anId);

(это будет иметь дополнительный бонус от дедупликации вашего списка идентификаторов, готовых к последнему шагу)

3 - Присоединиться к временному столу

SELECT t1.* FROM myTable1 t1 INNER JOIN tempIdTable tt ON t1.id = tt.id;

Временная таблица исчезнет, ​​как только ваше соединение будет разорвано, так что вам не нужно беспокоиться о его отбрасывании, прежде чем создавать его в следующий раз.

Другие вопросы по тегам