IN
предложение является логическим предикатом, поэтому вам необходимо заменить его фиктивным набором записей:
SELECT m.*
FROM (
SELECT 1 AS id
UNION ALL
SELECT 2 AS id
UNION ALL
SELECT 3 AS id
UNION ALL
SELECT 666 AS id
) q
LEFT JOIN
mytable m
ON m.id = q.id
В SQL Server 2008
вы можете выполнить этот запрос:
SELECT *
FROM @mydata d
LEFT JOIN
mytable t
ON t.id = d.id
с @mydate
- это табличная переменная, переданная в качестве параметра от клиента.
В PostgreSQL
вы можете выполнить этот запрос:
SELECT *
FROM (
SELECT :arr[s] AS id
FROM generate_series(1, array_upper(:arr, 1)) s
) q
LEFT JOIN
mytable t
ON t.id = q.id
, где :arr
это массив [1, 2, 3, 666]
, также переданный от клиента в качестве параметра.
В Oracle
вы можете сделать:
SELECT *
FROM TABLE(:mycol) q
LEFT JOIN
mytable t
ON t.id = q.id
, где :mycol
- переменнаятип коллекции, переданный от клиента.