mysql - 带有索引列的 WHERE 子句中的 "CASE WHEN"

标签 mysql function key case where-clause

我有一个在 WHERE 子句中带有 CASE WHEN 条件的函数。简单(非常简单)它看起来像这样:

SELECT *
FROM mytable t
WHERE (
   CASE aPARAM WHEN 'a' THEN t.a = aID
               WHEN 'b' THEN t.b = aID
               WHEN 'c' THEN t.c = aID
               ELSE TRUE END
)

aPARAMaID - 函数参数

abc - 表“mytable”的索引列

但在这种情况下,MySQL 根本不使用索引。

是的,此查询包含选择另一个条件的条件,但它不依赖于结果值,并且可以在查询执行之前计算(定义)。

什么可以使用建议这个函数来使用索引?

最佳答案

Case是MySQL不能使用索引的表达式。尝试将案例转换为一堆 or 条件,如下所示:

SELECT *
FROM mytable t
WHERE (t.a = aID and aPARAM = 'a')
or (t.b = aID and aPARAM = 'b')
or (t.c = aID and aPARAM = 'c')
or (aPARAM not in ('a','b','c'))

关于mysql - 带有索引列的 WHERE 子句中的 "CASE WHEN",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47691688/

相关文章:

Java Springs 连接池 com.mchange.v2.c3p0.impl.NewProxyConnection

MySQL EXPLAIN - 它每次都给我不同的解释

php - MySQL/PHP - 查找可用的时间段

javascript - 如何在函数中使用 javascript if 语句来填充表

python - 我想根据方法的参数对方法中的列表进行排序

javascript - 在 JavaScript 中对集合中的某些键执行转换

c - 为什么 main 以返回类型字符串运行,即使它是用整数返回类型定义的?

function - F# 查找序列中所有元素的函数的最低结果

在函数内部更改函数参数的 Pythonic 方式

python - 嵌套字典作为参数