我猜想标题中的查询如下:
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。)
例如,您可以在 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)