【发布时间】:2014-03-05 20:01:13
【问题描述】:
我最近不得不编写一个查询来过滤一些如下所示的特定数据:
假设我有 3 个不同的值,我想在我的数据库中我的一个表的 3 个不同字段中搜索它们,它们必须以所有可能的顺序搜索而不重复。
这是一个示例(为了便于理解,我将使用命名查询表示法来显示必须放置值的位置):
val1 = "a", val2 = "b", val3 = "c"
这是我生成的查询:
SELECT * FROM table WHERE
(fieldA = :val1 AND fieldB = :val2 AND fieldC = :val3) OR
(fieldA = :val1 AND fieldB = :val3 AND fieldC = :val2) OR
(fieldA = :val2 AND fieldB = :val1 AND fieldC = :val3) OR
(fieldA = :val2 AND fieldB = :val3 AND fieldC = :val1) OR
(fieldA = :val3 AND fieldB = :val1 AND fieldC = :val2) OR
(fieldA = :val3 AND fieldB = :val2 AND fieldC = :val1)
我要做的是生成一个模拟排列而不重复的查询。有没有更好的方法来进行这种类型的查询?
这对于 3x3 是可以的,但如果我需要对 9x9 等更大的东西做同样的事情,那么生成查询将是一团糟。
我正在使用 MariaDB,但我可以接受可以在 PostgreSQL 上运行的答案。 (我想了解是否有一种无需“蛮力”即可编写此类查询的智能方法)
【问题讨论】:
-
您的列的日期类型是什么?因为,对于整数,很快就有一个更快的解决方案......
-
都是'字符串'
标签: mysql sql postgresql permutation mariadb