Mysql SQL已准备好使用case选择列,列或变量在where中

Mysql SQL已准备好使用case选择列,列或变量在where中,mysql,sql,case,Mysql,Sql,Case,是否可以在SELECT中使用使用WHERE中的列名或变量的CASE语句?差不多 SELECT CASE WHEN lang = french THEN COL1 WHEN lang = english THEN COL2 WHEN lang = italian THEN COL3 END AS language FROM MyTable WHERE lang = 'english' ORM限制的重要部分是列名只能以

是否可以在SELECT中使用使用WHERE中的列名或变量的CASE语句?差不多

SELECT
    CASE
        WHEN lang = french THEN COL1
        WHEN lang = english THEN COL2
        WHEN lang = italian THEN COL3
    END AS language
FROM
    MyTable
WHERE
    lang = 'english'
ORM限制的重要部分是列名只能以的格式添加到WHERE子句中

name = 'value' 
我可以控制名称和值,但equals运算符不能更改。它实际上是一个事先准备好的声明,所以在某一点上它变得很现实

...
WHERE
    something = ?
但就这个问题而言,我认为这并不重要


我不能改变这一事实,即这是在以后的WHERE子句中添加的,但我可以更改整个初始MySQL查询。

如果我理解正确,lang是变量,而不是数据中的列。如果是这样的话,我能想到的唯一解决方案——除了消除应用程序环境(这似乎是一个很大的障碍)之外——是取消对数据的抽取,然后进行过滤:

select tt.col
from ((select 'english' as lang, col1 as col from t) union all
      (select 'french' as lang, col2 from t) union all
      (select 'italian' as lang, col3 from t)
     ) tt
where tt.lang = :lang;
或:


变量不是来自where。该变量似乎是一列。我对你真正想做的有点不知所措。公正地说,我会澄清一下,表格中有没有列?更新了问题以减少混乱
select (case when col = 1 then col1
             when col = 2 then col2
             when col = 3 then col3
        end) as col
from t cross join
     (select 'english' as lang, 1 as col union all
      select 'french' as lang, 2 as col union all
      select 'italian' as lang, 3 as col
     ) l
where l.lang = :lang