带有本地(内联)数组的SQL语句

时间:2014-06-05 11:53:44

标签: sql

在许多语言中,可以使用内联的值列表,其中某种形式的代码类似于:

for x in [1,7,8,12,14,56,123]:
    print x  # Or whatever else you fancy doing

在过去一年左右的时间里使用SQL,我发现即使在WHERE中使用这样的数组也不是问题...

select * 
from foo
where someColumn in (1,7,8,12,14,56,123) and someThingElse...

...我还没有找到与内联数组中的GET数据等效的形式:

-- This is not working
select * 
from (1,7,8,12,14,56,123)
where somethingElse ...

在寻找解决方案时,我发现只有人建议工会汤:

select *
from (SELECT 1 UNION SELECT 1 UNION SELECT 7 UNION ...)
where somethingElse ...

......这可以说是丑陋和冗长的。

我可以在我的编辑器(VIM)中通过几次击键快速生成列表中的UNION汤,然后将其粘贴回我的数据库提示符 - 但我想知道我是否缺少其他方法来完成此操作。 / p>

此外,如果没有标准的方法,我仍然会对特定于DB引擎的解决方案(Oracle,PostgreSQL等)感兴趣

提前感谢任何指示。

1 个答案:

答案 0 :(得分:2)

行/表值构造函数有时可以用作简短的 ish 手,例如在MSSQL中:

select * from (values (1),(7),(8),(12)) as T (f)

语法比传递给in ()的简单数组列表更复杂,因为它必须能够描述多维数据集:

select * from (values (1, 'a'),(7, 'b'),(8, 'c'),(12, 'd')) as T (f, n)

当然,当您发现列出文字值的要求时,通常最好将它们放在表格中并查询它们。