metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-08-09 08:06 pm

SQL 'in' clause

Скажите мне такую вещь: список значений в in выражении в SQL можно вообще передать параметром, хоть в какой-нибудь СУБД?

В Firebird нельзя, ну я как-то не интересовался, как оно в других СУБД, использовал временную табличку и подзапрос с where exists (select 1 from TmpTbl ...) но что-то вот сегодня пришло в голову - а почему собственно нельзя?

[identity profile] sbj-ss.livejournal.com 2014-08-10 09:28 pm (UTC)(link)
Можно сджойнить на TVF, разбирающую строку.
В MSSQL у решения есть очевидный недостаток: отсутствие статистики, т.е. в зависимости от объёма данных для "IN" может потребоваться подсказка "INNER MERGE JOIN". По умолчанию явно будет LOOP JOIN.