В MySQL количество в IN ограничено значением max_allowed_packet
http://dev.mysql.com/doc/refman/5.0/...ml#function_in
Но если уж пошла об этом речь, о слишком большом перечислении, ведь во временную таблицу данные тоже вставить надо, верно? Значит их количество ограничено длиной всего запроса, видимо ее хватает (да еще и лишний запрос, то есть медленно). Та почему бы в таком случае и выборку не сформировать просто как:
IN(...) or IN(...) or IN(...) ?
Более того, если же данные не умещаются в один запрос вставки, и вставляются во временну таблицу за несколько приемов и не разумно просто увеличить максимальное их количество, то ведь наверное можно сделать так (не проверял):
SELECT .... WHERE ID IN (...many, many values...)
UNION ALL
SELECT .... WHERE ID IN (...other part of many, many values...)
UNION ALL
SELECT .... WHERE ID IN (...other part of many, many values...)
разве нет?