2012-03-28 3 views
5

При попытке запустить подпрограмму я получаю следующее сообщение об ошибке:MySQL Код ошибки 1166. Неверное имя столбца

Error Code: 1166. Incorrect column name 'School.`School Name` = case when School.`Web School Name` is null then School.`School Name` els'

Я дважды проверил имя столбца и есть на самом деле School.School Name. Нет начальных или конечных пробелов. Вот начало подпрограммы, что ошибка имеет в виду:

CREATE temporary TABLE tt_Step1 
SELECT DISTINCT State.Code, State.Name, 
School.`School Name` = case 
    when School.`Web School Name` is null then School.`School Name` 
    else School.`Web School Name` 
    end, 
School.`School ID` 
-- Into tt_Step1 
FROM State LEFT JOIN School ON State.Code = School.State 
Where (School.`School ID` <> ... 

Я недавно конвертированы этот код из MSSQL в MySQL, так что может быть что-то я пропустил, но я не могу найти какие-либо ошибки. Исходный запрос MSSQL отлично работает в SQL Server Management Studio, но преобразованная версия его в MySQL не работает.

+0

Имя столбца с пространством не может быть в MySQL: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html –

+3

@ DavidBllanger: Это абсолютно не так. Единственное, что связывает doc, это 'can not ** end ** с пробелами. – mellamokb

+1

Зачем голосовать? Это совершенно прекрасный вопрос. –

ответ

3

Дайте этот выстрел:

CREATE temporary TABLE tt_Step1 
SELECT DISTINCT State.Code, State.Name, 
coalesce(School.`Web School Name`, School.`School Name`), 
School.`School ID` 
-- Into tt_Step1 
FROM State LEFT JOIN School ON State.Code = School.State 
Where (School.`School ID` <> ... 
+0

Я использовал «coalesce (School.'Web School Name', School.'School Name') как« School Name ». Это в основном работает, но иногда имя школы возвращается как 0 или 1 для некоторых записей. –

+0

Все coalesce does проверяет первый аргумент для null, если он равен нулю, вместо этого используйте второй аргумент. Если вы возвращаетесь «0» и «1» из коалесценции, это потому, что в вашей таблице School есть данные с «0» и «1» в этих столбцах. – robertvoliva

+0

Да, я не уверен, что происходит. Я проверил таблицу вручную и с запросом и не нашел значений 0 или 1. В любом случае я использовал старый аргумент case и правильно его навел, и оба результата возвратили одно и то же, поэтому я приму этот ответ. По-видимому, у меня другие проблемы. Большое спасибо за помощь. –

2

У вас есть несколько вопросов.

  1. Вы не можете использовать колонку с многочастным именем, например School.School Name.
  2. Сложность в MySql выполняется с blah as ColumnName, а не ColumnName = blah.
0

В моем случае это было вызвано невидимым дополнительным пространством после имени столбца. Я написал promotion-ids вместо promotion-id.

Смежные вопросы