Mysql SQL已准备好使用case选择列,列或变量在where中
是否可以在SELECT中使用使用WHERE中的列名或变量的CASE语句?差不多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
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