2010-05-03 55 views
0

我有一组数字和id(主键)和text(非空)列的数据库中的表。我想创建一个查询,返回集合中的所有数字以及表中的相关文本。不幸的是在数据库中的id列不存在的所有数字,所以这是行不通的:在数据库中使用一组数字而不创建临时表

select id, text 
from table 
where id in (<set of numbers>) 

对于不存在的IDS最好将返回null从查询的文本。

有没有办法在没有首先从数据库内的集合创建临时表的情况下产生所需的输出?

正在使用的数据库引擎是Microsoft SQL Server 2008 SP1,但我会对任何数据库引擎的解决方案感兴趣。

+1

为什么要避免创建临时表?这似乎是对我来说最明显的解决方案。 – RationalGeek 2010-05-03 16:23:17

+0

@jkohlhepp;它不一定是最好的解决方案,例如oracle可以通过双向递归查询生成序列号,该序列号可以更好地缩放然后物化版本。没有关于MS SQL性能的数据。 – Unreason 2010-05-04 08:13:10

+0

Unreason给出了这个请求的确切原因 - 我会避免频繁地创建非常大的表。 – Zizzencs 2010-05-04 09:14:39

回答

0

的解决方案是特定

  • MySQL有没有什么好办法做到以上无需临时表
  • 甲骨文可以做递归查询(详情here
  • MS SQL请求非常有效高度数据库可以通过递归查询来实现,但我不知道如何有效

检查链接的文章并查看哪些查询MS SQL 2008年支持和如何执行他们。