Unbekannte Spalte im Fehler 'Feldliste' bei MySQL Update-Abfrage


127

Ich erhalte immer wieder den MySQL-Fehler # 1054, wenn ich versuche, diese Update-Abfrage durchzuführen:

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

Es ist wahrscheinlich ein Syntaxfehler, aber ich habe versucht, stattdessen einen inneren Join und andere Änderungen zu verwenden, aber ich erhalte immer die gleiche Meldung:

Unknown column 'y' in 'field list' 

Antworten:


167

Versuchen Sie, verschiedene Anführungszeichen für "y" zu verwenden, da das Bezeichner-Anführungszeichen das Backtick ("` ") ist. Andernfalls "denkt" MySQL, dass Sie auf eine Spalte mit dem Namen "y" zeigen.

Siehe auch MySQL 5-Dokumentation


Ich hatte dies, als ich verwirrt war und doppelte Anführungszeichen anstelle von einfachen Anführungszeichen um meine Zeichenfolgen verwendete.
Tripleee

48

Fügen Sie alle Zeichenfolgen, die an den MySQL-Server übergeben werden sollen, in einfache Anführungszeichen ein. z.B:

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

Beachten Sie, dass die Abfrage zwar in doppelte Anführungszeichen eingeschlossen ist, Sie jedoch jede Zeichenfolge in einfache Anführungszeichen setzen müssen.


Danke dir. Ich habe versucht herauszufinden, warum meine Abfrage in PHP nicht funktioniert hat. Ich musste nur die einfachen Anführungszeichen hinzufügen.
RiCHiE

1
Ich weiß, dass dies ein alter Beitrag ist, aber könnten Sie antworten, warum Sie Anführungszeichen setzen müssen?
RiCHiE

@RiCHiE Es ist normalerweise sicherer, wenn Zeichenfolgen verwendet werden. Außerdem ist es für mich sinnvoller, Zeichenfolgen zwischen Anführungszeichen zu setzen. Wenn Sie beispielsweise Funktionen wie SHA1 verwenden, setzen Sie Anführungszeichen in den Inhalt wieSHA1('$var')
George

Das hat bei mir funktioniert. Zuerst habe ich versucht, Backticks ohne Glück zu verwenden.
Radbyx

Bitte entkommen Sie allen Variablen, die ordnungsgemäß in Abfragen übergeben wurden! Verwenden Sie einfach $name = mysqli_real_escape_string($name), um Anführungszeichen richtig zu entkommen!
Le 'nton

16

Sie können Ihre Auswahl an Anführungszeichen überprüfen (verwenden Sie doppelte / einfache Anführungszeichen für Werte, Zeichenfolgen usw. und Backticks für Spaltennamen).

Da Sie nur die Tabelle aktualisieren möchten, master_user_profilewürde ich eine verschachtelte Abfrage empfehlen:

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

In meinem Fall wurde dies durch ein unsichtbares Leerzeichen am Ende des Spaltennamens verursacht. Überprüfen Sie einfach, ob Sie stattdessen wirklich "y" oder "y" verwenden.


2

Während ich zuerst an einer .NET-App arbeitete, die mit EF-Code erstellt wurde, wurde diese Fehlermeldung angezeigt, als ich versuchte, meine Migration dort anzuwenden, wo ich eine Sql("UPDATE tableName SET columnName = value");Anweisung hatte.

Es stellte sich heraus, dass ich den Spaltennamen falsch geschrieben habe.


1

Ich teile nur meine Erfahrungen dazu. Ich hatte das gleiche Problem. Die Anweisung zum Einfügen oder Aktualisieren ist korrekt. Und ich habe auch die Kodierung überprüft. Die Spalte existiert. Dann! Ich fand heraus, dass ich auf die Spalte in meinem Trigger verwies. Sie sollten auch Ihren Trigger überprüfen, um festzustellen, ob ein Skript auf die Spalte verweist, mit der Sie das Problem haben.


1

Ich teile nur meine Erfahrungen dazu. Ich hatte das gleiche Problem. Meine Anfrage war wie:

select table1.column2 from table1

Tabelle1 hatte jedoch keine Spalte2 Spalte.


0

Ich habe auch den gleichen Fehler erhalten. Das Problem in meinem Fall ist, dass ich den Spaltennamen in die GROUP BYKlausel aufgenommen habe und dieser Fehler verursacht wurde. Also die Spalte aus der GROUP BYKlausel entfernt und es hat funktioniert !!!


0

Wenn es Ruhezustand und JPA ist. Überprüfen Sie, ob der Name Ihrer referenzierten Tabelle und die Spalten möglicherweise nicht übereinstimmen


0

Ich habe diesen Fehler erhalten, wenn ich GroupBy über LINQ in einer MySQL-Datenbank verwendet habe. Das Problem bestand darin, dass die von GroupBy verwendete anonyme Objekteigenschaft nicht mit dem Namen der Datenbankspalte übereinstimmte. Behoben durch Umbenennen des anonymen Eigenschaftsnamens entsprechend dem Spaltennamen.

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

0

Eine solche Abfrage verursacht auch den Fehler:

SELECT table1.id FROM table2

Wo die Tabelle in der Spalte select angegeben ist und nicht in der from-Klausel enthalten ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.