2012-03-28 127 views
5

Cuando trato de ejecutar una rutina me sale el siguiente error:Código de error de MySQL 1166. nombre de columna incorrecta

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

He comprobado el doble del nombre de columna y de hecho hay un School.School Name. No hay espacios iniciales o finales. Esto es el principio de la rutina que el error se refiere a:

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` <> ... 

Recientemente he convertido el código de MSSQL a MySQL lo que puede haber algo que había perdido, pero no puedo encontrar ningún error. La consulta MSSQL original funciona bien en SQL Server Management Studio, pero la versión convertida en MySQL no funciona.

+0

El nombre de columna con espacio no puede suceder en MySQL: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html –

+3

@ DavidBélanger: Eso no es absolutamente cierto. Lo único que dice el documento vinculado es 'no ** puede ** terminar ** con caracteres de espacio'. – mellamokb

+1

¿Por qué votar abajo esto? Esta es una muy buena pregunta. –

Respuesta

3

dar a este un tiro:

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

Utilicé "coalesce (Escuela. Nombre de la escuela web", Escuela. Nombre de la escuela) como "Nombre de la escuela". Esto funciona principalmente, pero a veces el nombre de la escuela vuelve como 0 o 1 para algunas entradas. –

+0

Todas las coalesce hace es comprobar el primer argumento para nulo, si es nulo, utilice el segundo argumento en su lugar. Si recuperas "0" y "1" de la unión, es porque hay datos en tu tabla de la Escuela con "0" y "1" en esas columnas. – robertvoliva

+0

Sí, no estoy seguro de lo que está pasando. Comprobé la tabla de forma manual y con una consulta y no encontré ningún valor de 0 o 1. De todos modos, utilicé el enunciado de caso anterior y lo alisé correctamente, y ambos resultados arrojaron la misma respuesta, por lo que aceptaré esta respuesta. Aparentemente tengo otros problemas. Muchas gracias por la ayuda. –

2

Usted tiene un par de cuestiones.

  1. No se puede alias una columna con un nombre de varias partes como School.School Name.
  2. Aliasing en MySql se hace con blah as ColumnName, no ColumnName = blah.
0

En mi caso, fue causado por un espacio extra invisible después del nombre de la columna. Escribí promotion-ids en lugar de promotion-id.

Cuestiones relacionadas