一键选择多个记录

zel*_*ler 5 sql

我猜想标题中的查询如下:

select * from table t where (t.k1='apple' and t.k2='pie') or (t.k1='strawberry' and t.k2='shortcake') 
... --10000 more key pairs here
Run Code Online (Sandbox Code Playgroud)

在我看来,这很冗长。还有更好的选择吗?(当前使用SQLite,可能使用MYSQL / Oracle。)

tvm*_*tvm 4

例如,您可以在 Oracle 上使用这个,我假设如果您使用常规 concatenate() 而不是 Oracle 的 || 在其他数据库上,它也可以工作(因为它只是与 IN 列表进行字符串比较)。请注意,此类查询可能具有次优的执行计划。

SELECT *
FROM
  TABLE t
WHERE
  t.k1||','||t.k2 IN ('apple,pie',
                      'strawberry,shortcake' );
Run Code Online (Sandbox Code Playgroud)

但是如果您将值列表存储在其他表中,Oracle 也支持以下格式。

SELECT *
FROM
  TABLE t
WHERE (t.k1,t.k2) IN ( SELECT x.k1, x.k2 FROM x );
Run Code Online (Sandbox Code Playgroud)