SQL中IN子句的问题

时间:2010-04-15 14:00:10

标签: sql

我们观察到似乎有一个最大数量的id /变量,可以在SQL的IN子句中以逗号分隔值传递。为了避免这种情况,我们将所有id存储在表中并在IN子句中执行SELECT。然而,这意味着额外的数据库操作来存储和检索id。在没有SELECT的情况下还有其他方法可以使用IN吗?

此致

萨米尔

4 个答案:

答案 0 :(得分:2)

SQL Server 2008中,您可以声明一个表变量,并将其传递给客户端或程序之间的查询。

答案 1 :(得分:2)

对于适度数量的值,我不会认为IN (SELECT ..)在任何rdbms上都是昂贵的。

您可以INNER JOIN ID表或只是分解IN:

WHERE X IN (123,456 ...)
   OR X IN (789,987 ...)
   ...

答案 2 :(得分:2)

同意Alex

而不是

Select * From TableA Where ID IN (Select ID from IDTable)

使用

Select * From TableA
INNER JOIN IDTable ON TableA.ID = IDTable.ID

联接会自动为您过滤ID。

答案 3 :(得分:0)

如果你把它放在一个表中为什么还在使用in子句,为什么不加入表呢?