gpt4 book ai didi

MYSQL:在 WHERE 子句中匹配 n-1 个条件的方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:26 25 4
gpt4 key购买 nike

我正在处理一组复杂的生成的 SQL 查询,其中包含多个 LEFT JOINS 以及 WHERE 子句中的三到两打条件。假设我们在 WHERE 子句中有 n 条件。现在,我想允许任何几乎符合条件的匹配项 - 即匹配 n-1 条件的任何匹配项。我也想知道哪个失败了,但我可以稍后在 PHP 中确定,所以这不是优先事项。

我的问题:我是否必须使用 () 大括号和 OR 将条件的所有可能组合冗长地放入 WHERE 子句中,还是可能有一个聪明而优雅的方法解决我还不知道的这种情况?

编辑:让我们忽略连接,让我们设想一个表:

SELECT * FROM tableName WHERE colA='something' AND colB='something else' AND colC='5' AND colD<colE AND colF='1'

所以这是 5 个条件,我们想匹配其中的任意 4 个并知道哪个失败了。以一种可扩展的方式,因此无论我们处理 5 个还是 25 个条件都无关紧要。

这是我想避免的笨拙的事情:

SELECT * FROM tableName WHERE (colB='something else' AND colC='5' AND colD<colE AND colF='1') OR (colA='something' AND colC='5' AND colD<colE AND colF='1') OR (colA='something' AND colB='something else' AND colD<colE AND colF='1') OR (colA='something' AND colB='something else' AND colC='5' AND colF='1') OR (colA='something' AND colB='something else' AND colC='5' AND colD<colE) OR (colA='something' AND colB='something else' AND colC='5' AND colD<colE AND colF='1')

最佳答案

您可以为此使用条件聚合:

SELECT id -- primary key fields
,SUM(CASE WHEN colA='something' THEN 1 ELSE 0 END) AS condition1
,SUM(CASE WHEN colB='something' THEN 1 ELSE 0 END) AS condition2
,SUM(CASE WHEN colC='something' THEN 1 ELSE 0 END) AS condition3
FROM YourTable
GROUP BY id
HAVING SUM(CASE WHEN colA='something' THEN 1 ELSE 0 END)
+ SUM(CASE WHEN colB='something' THEN 1 ELSE 0 END)
+ SUM(CASE WHEN colC='something' THEN 1 ELSE 0 END)
>= 2

您可以将条件聚合字段添加到您的 SELECT 中如果您想跟踪哪些成功或失败,并将其放入子查询中以重新加入 id获取完整的记录详细信息。

MySQL您可以使用 SUM(colA = 'something') 稍微简化语法而不是 CASE表达式。

关于MYSQL:在 WHERE 子句中匹配 n-1 个条件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34377101/

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