サーバー側の処理で DataTables を使用する webapp があります。列のデータを任意に再グループ化する SQL クエリがいくつかあるので、次のようなクエリを取得します。
SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped`, SUM(`2010`)
GROUP BY `colonne grouped`
ここで、ユーザー入力に基づいてフィルタリングを追加すると、次のようになります。
SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped`, SUM(`2010`)
GROUP BY `column grouped`
HAVING `column grouped` LIKE '%test%'
それでも問題なく動作しますが、すべてを大文字と小文字を区別しないようにしようとすると問題が発生するため、次のようにします。
SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped`, SUM(`2010`)
GROUP BY `colonne grouped`
HAVING UPPER(`column grouped`) LIKE '%test%'
そして今、「#1054 - 未知の列 'グループ化された列' が 'having 句' にある」というメッセージが表示されます
回避策として、私は次のようなことをします:
SELECT case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END AS `column grouped` , SUM(`2010`)
GROUP BY `colonne grouped`
HAVING UPPER(case `column`
WHEN 'value1' then 'group1'
WHEN 'value2' then 'group1'
ELSE `column` END) LIKE '%test%'
しかし、これは本当に便利ではありません。カスタムエイリアスで UPPER を使用できない理由を知っている人はいますか?
ちなみにMySQL5.5を使っています。