Colonna sconosciuta in errore "elenco campi" nella query di aggiornamento MySQL


127

Continuo a ricevere l'errore MySQL n. 1054, quando provo a eseguire questa query di aggiornamento:

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH
SET MASTER_USER_PROFILE.fellow=`y`
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID
AND TRAN_USER_BRANCH.BRANCH_ID = 17

Probabilmente è un errore di sintassi, ma ho provato a utilizzare invece un inner join e altre alterazioni, ma continuo a ricevere lo stesso messaggio:

Unknown column 'y' in 'field list' 

Risposte:


167

Prova a utilizzare virgolette diverse per "y" poiché il carattere delle virgolette dell'identificatore è il backtick ("" "). Altrimenti MySQL "pensa" che punti a una colonna chiamata "y".

Vedi anche la documentazione di MySQL 5


Ho avuto questo quando ero confuso e ho usato virgolette doppie invece di virgolette singole attorno alle mie stringhe.
tripleee

48

Racchiudere qualsiasi stringa da passare al server mysql tra virgolette singole; per esempio:

$name = "my name"
$query = " INSERT INTO mytable VALUES ( 1 , '$name') "

Notare che sebbene la query sia racchiusa tra virgolette doppie, è necessario racchiudere qualsiasi stringa tra virgolette singole.


Grazie. Stavo cercando di capire perché la mia query in PHP non funzionava, tutto quello che dovevo fare era aggiungere le virgolette singole.
RiCHiE

1
So che questo è un vecchio post, ma saresti in grado di rispondere perché devi mettere le virgolette?
RiCHiE

@RiCHiE di solito è più sicuro quando si usano le stringhe. Inoltre, per me ha più senso mettere una stringa tra virgolette. Quando usi funzioni come SHA1, ad esempio, inserisci virgolette nel contenuto all'interno comeSHA1('$var')
George

Questo ha funzionato per me. Per prima cosa ho provato a usare i backtick senza fortuna.
radbyx

Esegui correttamente l'escape di tutte le variabili passate nelle query! Basta usare $name = mysqli_real_escape_string($name)per sfuggire alle virgolette correttamente!
Le 'nton

16

Puoi controllare la tua scelta di virgolette (usa virgolette doppie / singole per valori, stringhe, ecc. E apici inversi per i nomi delle colonne).

Dal momento che vuoi solo aggiornare la tabella, master_user_profileti consiglio una query nidificata:

UPDATE
   master_user_profile
SET
   master_user_profile.fellow = 'y'
WHERE
   master_user_profile.user_id IN (
      SELECT tran_user_branch.user_id
      FROM tran_user_branch WHERE tran_user_branch.branch_id = 17);

4

Nel mio caso, è stato causato da uno spazio finale invisibile alla fine del nome della colonna. Controlla solo se usi davvero "y" o "y".


2

Mentre lavoravo prima su un'app .Net compilata con codice EF, ho ricevuto questo messaggio di errore quando ho provato ad applicare la mia migrazione dove avevo Sql("UPDATE tableName SET columnName = value");un'istruzione.

Si scopre che ho scritto male il nome della colonna.


1

Sto solo condividendo la mia esperienza su questo. Stavo avendo lo stesso problema. L'istruzione di inserimento o aggiornamento è corretta. E ho anche controllato la codifica. La colonna esiste. Poi! Ho scoperto che stavo facendo riferimento alla colonna nel mio Trigger. Dovresti anche controllare il tuo trigger per vedere se qualche script fa riferimento alla colonna con cui stai riscontrando il problema.


1

Sto solo condividendo la mia esperienza su questo. Stavo avendo lo stesso problema. La mia domanda era come:

select table1.column2 from table1

Tuttavia, table1 non aveva la colonna column2.


0

Anch'io ho ricevuto lo stesso errore, il problema nel mio caso è che ho incluso il nome della colonna nella GROUP BYclausola e questo ha causato questo errore. Quindi rimossa la colonna dalla GROUP BYclausola e ha funzionato !!!


0

Se è ibernato e JPA. controllare il nome della tabella di riferimento e le colonne potrebbero non corrispondere


0

Ho ricevuto questo errore durante l'utilizzo di GroupBy tramite LINQ su un database MySQL. Il problema era che la proprietà dell'oggetto anonimo utilizzata da GroupBy non corrispondeva al nome della colonna del database. Risolto il problema con la ridenominazione del nome della proprietà anonima in modo che corrisponda al nome della colonna.

.Select(f => new 
{
   ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);

0

Una query come questa causerà anche l'errore:

SELECT table1.id FROM table2

Dove la tabella è specificata nella colonna select e non è inclusa nella clausola from.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.