gpt4 book ai didi

mysql - 优先于 OR 条件的 SQL 查询

转载 作者:行者123 更新时间:2023-11-29 02:15:23 25 4
gpt4 key购买 nike

我有一个这样的示例表

+----+-------+--------+---------+
| Id | Type | Format | Default |
+----+-------+--------+---------+
| 1 | IMAGE | PNG | true |
| 2 | IMAGE | PNG | false |
| 3 | IMAGE | JPG | false |
| 4 | IMAGE | JPG | true |
| 5 | VIDEO | MP4 | false |
+----+-------+--------+---------+

我需要实现这样的查询

SELECT * FROM media WHERE type = 'IMAGE' and format = 'PNG'

如果查询给出 0 个结果,则需要将 format 过滤器替换为

SELECT * FROM media WHERE type = 'IMAGE' and default = TRUE

因此,有一个固定过滤器始终存在(在两次尝试中),因为此示例是使用 type = 'IMAGE' 和 2 个需要根据结果大小组合的过滤器第一个条件

我试图了解是否有一种方法可以执行一个可以连接两个条件的查询,第一个条件的某种优先级 format 将排除第二个条件的结果默认

像这样

SELECT * FROM media WHERE type = 'IMAGE' AND (format = 'PNG' OR default = TRUE)

不合适,因为无论第一个条件是否给出至少一个结果,OR 条件总是给出 default=TRUE 记录。

我考虑过 XOR 运算符,但它会排除所有非默认的 PNG 结果。而对于 format 过滤器,default 的值将被忽略

有没有一种方法可以仅使用 1 个查询来重现此行为?

预期结果

示例 1) 它至少存在一个 PNG,所以收集这些(默认或非默认无关紧要,format 过滤器优先)

conditions = [format = 'PNG' | default = true]
| 1 | IMAGE | PNG | true |
| 2 | IMAGE | PNG | false |

示例 2) 它至少存在一个 JPG,所以收集这些

conditions = [format = 'JPG' | default = true]
| 3 | IMAGE | JPG | false |
| 4 | IMAGE | JPG | true |

例子3)不存在GIF,所以收集所有默认值

conditions = [format = 'GIF' | default = true]
| 1 | IMAGE | PNG | true |
| 4 | IMAGE | JPG | true |

最佳答案

您需要将 NOT EXIST 子句与 default=true 谓词一起使用。

SELECT * FROM media
WHERE (format = 'PNG' AND type = 'IMAGE')
OR (NOT EXISTS (SELECT 1 FROM media WHERE format = 'PNG' AND type = 'IMAGE')
AND default = 'true')

关于mysql - 优先于 OR 条件的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40649182/

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