在许多语言中,可以使用内联的值列表,其中某种形式的代码类似于:
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等)感兴趣
提前感谢任何指示。
答案 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)
当然,当您发现列出文字值的要求时,通常最好将它们放在表格中并查询它们。