sql - 多条记录复合键一选

标签 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

这对我来说看起来很冗长。有没有更好的选择? (目前使用 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/

相关文章:

mysql - 如何按时间范围对员工进行分组?

java - 通过不稳定的网络同步本地数据库和远程应用程序

mysql - 将记录从 PostgreSQL 导入到 MySQL

SQL 查询 select * if <this> 但不是 if <condition>

sql - 使用 SQL max() 查找平均评分最高的电影

sql - 在 JSON 数组中搜索包含与模式匹配的值的对象

Python:将值写入 MSSQL Server 中的表

mysql - 如何为此目的创建 SQL 重试?

php - 使用 javascript 和 AJAX 进行数据库过滤

mysql - Group By 不在 SQL 中按列聚合分组