Mam proste zapytanie:
SELECT u_name AS user_name FROM users WHERE user_name = "john";
Rozumiem Unknown Column 'user_name' in where clause
. Czy nie mogę odnieść się do 'user_name'
innych części oświadczenia nawet po select 'u_name as user_name'
?
mysql
sql
mysql-error-1054
Btuman
źródło
źródło
Co powiesz na:
źródło
HAVING
zamiastWHERE
w tym przypadku?Zobacz następującą stronę podręcznika MySQL: http://dev.mysql.com/doc/refman/5.0/en/select.html
(...)
źródło
Pomyśl o tym w ten sposób, Twoja klauzula where jest obliczana jako pierwsza, aby określić, które wiersze (lub połączone wiersze) mają zostać zwrócone. Po wykonaniu klauzuli where, klauzula select jest uruchamiana dla niej.
Ujmując to lepiej, wyobraź sobie to:
Nie możesz odwołać się do pierwszej połowy bez drugiej. Gdzie zawsze jest oceniany jako pierwszy, a następnie klauzula select.
źródło
Jeśli próbujesz wykonać zapytanie podobne do poniższego (znajdź wszystkie węzły z co najmniej jednym załącznikiem), w którym użyłeś instrukcji SELECT, aby utworzyć nowe pole, które faktycznie nie istnieje w bazie danych, i spróbuj użyć alias dla tego wyniku napotkasz ten sam problem:
W klauzuli WHERE pojawi się błąd „Nieznana kolumna„ filecount ””.
Rozwiązanie jest właściwie dość proste - wystarczy zamienić alias na instrukcję, która tworzy alias, np .:
Nadal otrzymasz zwrócony alias, ale teraz SQL nie powinien działać na nieznanym aliasie.
źródło
(
w zapytaniu dodatek,(COUNT(*)
który nie jest nigdzie zamknięty.Zdefiniowane
alias
przezWHERE
Ciebie nie są mile widziane przez klauzulę, w której musisz użyćHAVING
klauzuliLUB możesz bezpośrednio użyć oryginalnej nazwy kolumny z rozszerzeniem
WHERE
Tak samo, jak w przypadku wyniku w aliasie zdefiniowanym przez użytkownika w wyniku podzapytania lub dowolnego obliczenia, dostęp do niego będzie możliwy przez
HAVING
klauzulę, a nie przezWHERE
źródło
Zarówno:
lub:
Ten drugi powinien być taki sam jak pierwszy, jeśli RDBMS obsługuje wypychanie predykatów do widoku in-line.
źródło
poprawione:
źródło
Nie, musisz go wybrać z poprawną nazwą. Jeśli podałeś tabelę, którą wybierzesz z aliasu, możesz tego użyć.
źródło
Nie, nie możesz. nazwa_użytkownika nie istnieje do czasu powrotu.
źródło
Nieznana kolumna w
WHERE
klauzuli spowodowana liniami 1 i 2 i rozwiązana przez linię 3:$sql = "SELECT * FROM users WHERE username =".$userName;
$sql = "SELECT * FROM users WHERE username =".$userName."";
$sql = "SELECT * FROM users WHERE username ='".$userName."'";
źródło
Może to pomoże.
Możesz
To działa.
ALE UPEWNIJ SIĘ, CO ROBISZ!
Ale może w niektórych przypadkach to pomaga
źródło
Chociaż możesz aliasować swoje tabele w zapytaniu (np. „SELECT u.username FROM users u;”), musisz użyć rzeczywistych nazw kolumn, do których się odnosisz. AS wpływa tylko na sposób zwracania pól.
źródło
źródło
Właśnie miałem ten problem.
Upewnij się, że w nazwie jednostki w bazie danych nie ma spacji.
np. „nazwa_użytkownika” zamiast „nazwa_użytkownika”
źródło
wypróbuj swoje zadanie używając warunku IN lub warunku OR , a także to zapytanie działa na spark-1.6.x
lub
źródło
Dla mnie źródłem problemu była liczba, którą skopiowałem, aby użyć w klauzuli WHERE. Liczba miała symbol „niewidoczny”, przynajmniej dla MySQL Workbench. Numer umieściłem w konsoli Chrome, żeby był dobrze widoczny.
źródło
Miałem ten sam problem, uznałem to za przydatne.
pamiętaj, aby umieścić $ user w pojedynczych cudzysłowach.
źródło