2012-03-28 27 views
5

Quando provo a fare funzionare una routine ottengo il seguente errore:MySQL Codice di errore 1166. corretto nome della colonna

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

ho ricontrollato il nome della colonna e non v'è infatti un School.School Name. Non ci sono spazi iniziali o finali. Ecco l'inizio della routine che l'errore si riferisce 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` <> ... 

Recentemente ho convertito questo codice da MSSQL a MySQL quindi ci può essere qualcosa mi mancava, ma non riesco a trovare eventuali errori. La query MSSQL originale funziona correttamente in SQL Server Management Studio ma la versione convertita di esso in MySQL non lo è.

+0

Nome colonna con spazio non può accadere in MySQL: http://dev.mysql.com/doc/refman/5.0/en/identifiers.html –

+3

@ DavidBélanger: Non è assolutamente vero. L'unica cosa che dice il documento collegato è "non può ** terminare ** con caratteri spaziali". – mellamokb

+1

Perché non votare questo? Questa è una domanda SO perfettamente valida. –

risposta

3

dare a questo un colpo:

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

Ho usato "coalesce (School. Net School Name', School .School Name') come' School name' ". Questo funziona principalmente, ma a volte il nome della scuola restituisce 0 o 1 per alcune voci. –

+0

Tutte le operazioni di coalesce è controllare il primo argomento per null, se è nullo, utilizzare invece il secondo argomento. Se stai recuperando "0" e "1" dalla coalescenza, è perché nella tabella della scuola ci sono dei dati con "0" e "1" in quelle colonne. – robertvoliva

+0

Sì, non sono sicuro di cosa stia succedendo. Ho controllato la tabella manualmente e con una query e non ho trovato alcun valore di 0 o 1. Ad ogni modo, ho usato la vecchia istruzione case e l'ho formattato correttamente ed entrambi i risultati hanno restituito la stessa cosa quindi accetterò questa risposta. Ho altri problemi apparentemente. Grazie mille per l'assistenza. –

2

Hai un paio di questioni.

  1. Non è possibile creare alias una colonna con un nome composto da più parti come School.School Name.
  2. L'aliasing in MySql viene eseguito con blah as ColumnName, non ColumnName = blah.
0

Nel mio caso, è stato causato da uno spazio extra non visto dopo il nome della colonna. Ho scritto promotion-ids anziché promotion-id.

Problemi correlati