我猜标题中的查询看起来像这样:
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
这对我来说看起来很冗长。有没有更好的选择? (目前使用 SQLite,可能使用 MYSQL/Oracle。)
最佳答案
例如,您可以在 Oracle 上使用它,我假设如果您使用常规 concatenate() 而不是 Oracle 的 ||在其他数据库上,它也可以工作(因为它只是与 IN 列表的字符串比较)。请注意,此类查询可能具有次优执行计划。
SELECT *
FROM
TABLE t
WHERE
t.k1||','||t.k2 IN ('apple,pie',
'strawberry,shortcake' );
但是,如果您将值列表存储在其他表中,Oracle 也支持以下格式。
SELECT *
FROM
TABLE t
WHERE (t.k1,t.k2) IN ( SELECT x.k1, x.k2 FROM x );
关于sql - 多条记录复合键一选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514371/