gpt4 book ai didi

mysql - SQL查询以任意顺序将值列表与字段列表匹配而不重复

转载 作者:可可西里 更新时间:2023-11-01 06:39:57 28 4
gpt4 key购买 nike

我最近不得不编写一个查询来过滤一些特定的数据,如下所示:

假设我有 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 上运行的答案。(我想了解是否有一种无需“蛮力”即可编写此类查询的聪明方法)

最佳答案

没有更好的方法,但您可以使用in:

SELECT *
FROM table
WHERE :val1 in (fieldA, fieldB, fieldC) and
:val2 in (fieldA, fieldB, fieldC) and
:val3 in (fieldA, fieldB, fieldC)

至少它更短。而且,这是标准 SQL,因此它应该适用于任何数据库。

关于mysql - SQL查询以任意顺序将值列表与字段列表匹配而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22207970/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com