在许多语言中,可以使用内联值列表,以及某种形式的代码类似于以下内容:
for x in [1,7,8,12,14,56,123]:
print x # Or whatever else you fancy doing
Run Code Online (Sandbox Code Playgroud)
在过去一年左右的时间里使用 SQL,我发现即使在 WHERE 中使用这样的数组也不是问题......
select *
from foo
where someColumn in (1,7,8,12,14,56,123) and someThingElse...
Run Code Online (Sandbox Code Playgroud)
...我还没有找到从内联数组获取数据的等效形式:
-- This is not working
select *
from (1,7,8,12,14,56,123)
where somethingElse ...
Run Code Online (Sandbox Code Playgroud)
在寻找解决方案时,我只发现有人建议联合汤:
select *
from (SELECT 1 UNION SELECT 1 UNION SELECT 7 UNION ...)
where somethingElse ...
Run Code Online (Sandbox Code Playgroud)
...这可以说是丑陋且冗长的。
我可以在编辑器 (VIM) 中通过几次按键快速从列表中生成 UNION soup,然后将其粘贴回我的数据库提示符 - 但我想知道我是否缺少其他一些方法来完成此操作。
另外,如果没有标准的方法来做到这一点,我仍然会对特定于数据库引擎的解决方案(Oracle、PostgreSQL 等)感兴趣
预先感谢您的任何指点。
行/表值构造函数有时可以用作短手,例如在 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)
当然,当您发现需要列出文字值时,将它们粘贴到表中并查询它们通常是一个好主意。