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' 
ja tutaj
źródło

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

tuergeist
źródło
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.

ShoushouLeb
źródło
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);
Tim Cooper
źródło
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”.

Aminah Nuraini
źródło
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.

Masterchief
źródło
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.

Dean Chiu
źródło
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.

user674669
źródło
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 !!!

mannedear
źródło
0

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

Poorna
źródło
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);
Eternal21
źródło
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.

hogarth45
źródło