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是一个集合类型的变量,从客户端传递过来。