我有来自外部数据库的id的本地数据。我想使用这些id从该外部数据库中选择数据,所以我做了类似的事情:
SELECT * FROM table WHERE id IN (:listofids)
但是我注意到了(我不确定它是数据库设置的DB还是数据库的类型或者什么)在该IN语句中可以允许最大数量的值。如果可能,我当然会WHERE id IN (SELECT id FROM ...)
,但有时候使用外部数据是不可能的。
我的问题:
in () OR in () OR in()
。这看起来不太光滑。所有这些选择都可行吗?答案 0 :(得分:1)
避免临时表的一个非常简单的解决方案是执行以下操作:
SELECT
t.*
FROM
[table] t
INNER JOIN (
SELECT 'id1' AS id
UNION ALL
SELECT 'id2'
UNION ALL
SELECT 'id3') i ON i.Id = t.Id;
显然,使用大量UNION创建子查询的工作要多得多,但这有效地创建了一个临时表,您可以使用它而不必担心实现它。
答案 1 :(得分:0)
除了我在上面做的事情之外,我还有什么选择?
它们是有限的 - 您可以链接一长串OR id = X
来电,但与IN
相比,您可能会遇到严重的性能问题。
best 选项在性能方面是加入服务器端的表(参数,临时,CTE,内联UNION
或静态)。但是,这并不总是一个选项,具体取决于您执行查询的方式以及您拥有的权限。
当然,您也可以为每个值执行单独的查询,这样可以更容易编码,但也可能存在性能问题。
最大项目的限制是在DB级别设置的,DB的类型是什么?
这是特定于平台的,所以没有通用答案
我应该在()或()或()中进行。这似乎不太光滑。所有这些选择都可行吗?
这是添加到上述其他选项的一个选项 - 您必须尝试查看性能影响。
我已经阅读了一些关于可能使用临时表来执行此操作的内容,但没有任何示例。如何将数据加载到临时表中,然后加入到我想要从中获取数据的表中?
这取决于平台,您的权限,可用的API等。