Ваша проблема, вероятно, myCTE
против MyCTE
- первая - как определяется CTE, а вторая - как на него ссылаются.
Здесь - это дБ < > Скрипка, которая показывает, что она работает с совпадающими именами и не работает с разницей в регистре. Я отмечаю, что в MariaDB (основанном на MySQL) это не проблема.
Чувствительность к регистру имен таблиц, псевдонимов таблиц и, предположительно, CTE, немного сложна в MySQL. Как объясняется в документации :
Следовательно, чувствительность к регистру базовой операционной системы играет роль в чувствительности к регистру имен баз данных, таблиц и триггеров. Это означает, что такие имена не чувствительны к регистру в Windows, но чувствительны к регистру в большинстве разновидностей Unix.
Исходя из языка , описывающего CTE, вполне возможно, что они хранятся в каком-то временном месте некоторого вида:
Общая таблица выражение (CTE) - это именованный временный набор результатов, который существует в области действия одного оператора и на который можно ссылаться позже в этом операторе, возможно, несколько раз.
И из-за использования базовой операционной системы они могут иногда быть чувствительными к регистру.
Примечание: я почти уверен, что это относится к CTE. Позже в документации указано, что псевдонимы таблиц иногда чувствительны к регистру:
По умолчанию псевдонимы таблиц чувствительны к регистру Unix, но не Windows или macOS. Следующий оператор не будет работать с Unix, поскольку он ссылается на псевдоним как a и как A:
mysql> SELECT col_name FROM tbl_name AS WHERE a.col_name = 1 ИЛИ A.col_name = 2;