Błąd nieznanej kolumny w „liście pól” w zapytaniu dotyczącym aktualizacji MySQL


127

Ciągle otrzymuję błąd MySQL nr 1054 podczas próby wykonania tego zapytania aktualizacyjnego:

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

Prawdopodobnie jest to błąd składniowy, ale próbowałem zamiast tego użyć sprzężenia wewnętrznego i innych zmian, ale wciąż otrzymuję ten sam komunikat:

Unknown column 'y' in 'field list' 

Odpowiedzi:


167

Spróbuj użyć innych cudzysłowów dla „y”, ponieważ znakiem cudzysłowu identyfikatora jest lewy apostrof („„ ”). W przeciwnym razie MySQL „myśli”, że wskażesz kolumnę o nazwie „y”.

Zobacz także Dokumentacja MySQL 5


Miałem to, gdy byłem zdezorientowany i użyłem podwójnych cudzysłowów zamiast pojedynczych cudzysłowów wokół moich ciągów.
tripleee

48

Każdy ciąg, który ma zostać przekazany do serwera mysql, należy ująć w pojedyncze cudzysłowy; na przykład:

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

Zwróć uwagę, że chociaż zapytanie jest ujęte w podwójne cudzysłowy, każdy ciąg należy ująć w pojedyncze cudzysłowy.


Dziękuję Ci. Próbowałem dowiedzieć się, dlaczego moje zapytanie w PHP nie działa, wszystko, co musiałem zrobić, to dodać pojedyncze cudzysłowy.
RiCHiE

1
Wiem, że to stary post, ale czy byłbyś w stanie odpowiedzieć, dlaczego musisz wstawiać cytaty?
RiCHiE

@RiCHiE jest zwykle bezpieczniejsze, gdy używa się ciągów. Poza tym bardziej sensowne jest dla mnie umieszczenie ciągu w cudzysłowie. Kiedy używasz na przykład funkcji takich jak SHA1, umieszczasz w treści cudzysłowy, takie jakSHA1('$var')
George

To zadziałało dla mnie. Najpierw bez powodzenia spróbowałem użyć lewych znaków.
radbyx

Proszę poprawnie zmienić znaczenie wszystkich zmiennych przekazywanych do zapytań! Po prostu użyj, $name = mysqli_real_escape_string($name)aby odpowiednio uciec przed cytatami!
Le 'nton

16

Możesz sprawdzić swój wybór cudzysłowów (użyj podwójnych / pojedynczych cudzysłowów dla wartości, ciągów znaków itp. I odwrotnych apostrofów dla nazw kolumn).

Ponieważ chcesz tylko zaktualizować tabelę master_user_profile, polecam zapytanie zagnieżdżone:

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

W moim przypadku było to spowodowane niewidoczną spacją na końcu nazwy kolumny. Po prostu sprawdź, czy naprawdę używasz zamiast tego „y” lub „y”.


2

Podczas pracy nad kompilacją aplikacji .Net z kodem EF, otrzymałem ten komunikat o błędzie podczas próby zastosowania migracji, w której miałem Sql("UPDATE tableName SET columnName = value");instrukcję.

Okazuje się, że błędnie wpisałem nazwę kolumny.


1

Po prostu dzielę się moim doświadczeniem w tej sprawie. Miałem ten sam problem. Instrukcja wstawiania lub aktualizacji jest poprawna. Sprawdziłem też kodowanie. Kolumna istnieje. Następnie! Dowiedziałem się, że odwołuję się do kolumny w moim wyzwalaczu. Powinieneś także sprawdzić wyzwalacz, aby zobaczyć, czy jakikolwiek skrypt odwołuje się do kolumny, z którą masz problem.


1

Po prostu dzielę się moim doświadczeniem w tej sprawie. Miałem ten sam problem. Moje zapytanie brzmiało:

select table1.column2 from table1

Jednak tabela 1 nie ma kolumny kolumna 2.


0

Ja też dostałem ten sam błąd, problem w moim przypadku polega na tym, że zawarłem nazwę kolumny w GROUP BYklauzuli i to spowodowało ten błąd. Usunąłem więc kolumnę z GROUP BYklauzuli i zadziałało !!!


0

Jeśli jest hibernacja i JPA. sprawdź, czy nazwa tabeli, do której się odwołujesz, i kolumny mogą być niezgodne


0

Otrzymałem ten błąd podczas korzystania z GroupBy przez LINQ w bazie danych MySQL. Problem polegał na tym, że właściwość obiektu anonimowego, która była używana przez GroupBy, nie była zgodna z nazwą kolumny bazy danych. Naprawiono przez zmianę nazwy anonimowej nazwy właściwości, aby pasowała do nazwy kolumny.

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

0

Takie zapytanie również spowoduje błąd:

SELECT table1.id FROM table2

Gdzie tabela jest określona w kolumnie select i nie jest uwzględniona w klauzuli from.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.