Zapytanie MySQL błąd #1054

0

Zapytanie

SELECT project.id_project_pk AS p_id, status.id_status_pk AS s_id, status.name AS s_name, account.id_account_pk AS w_id, account.name AS w_name, account.lastname AS w_lastname, account.id_account_pk AS c_id, account.name AS c_name, account.lastname AS c_lastname, project.netto_price AS p_netto, project.brutto_price AS p_brutto, project.add_time AS p_add_time, project.dead_time AS p_dead_time 
FROM project, status, account 
WHERE s_id = project.id_status_fk AND w_id = project.id_worker_fk AND c_id = project.id_client_fk

zwraca następujący błąd:

#1054 - Nieznana kolumna 's_id' w  where clause

Dlaczego zapytanie zwraca taki błąd? Pozdrawiam.

0

Popatrz na kod który wkleiłeś i zobacz czy wszystko Ci pasuje w klauzuli FROM - ?? I jak? Słówko Status?
https://dev.mysql.com/doc/refman/5.7/en/keywords.html

0
axelbest napisał(a):

Popatrz na kod który wkleiłeś i zobacz czy wszystko Ci pasuje w klauzuli FROM - ?? I jak? Słówko Status?
https://dev.mysql.com/doc/refman/5.7/en/keywords.html

zamieniłem nazwę tej tabeli na pstatus, teraz wygląda to w ten sposób

SELECT project.id_project_pk AS p_id, pstatus.id_pstatus_pk AS s_id, pstatus.name AS s_name, account.id_account_pk AS w_id, account.name AS w_name, account.lastname AS w_lastname, account.id_account_pk AS c_id, account.name AS c_name, account.lastname AS c_lastname, project.netto_price AS p_netto, project.brutto_price AS p_brutto, project.add_time AS p_add_time, project.dead_time AS p_dead_time 
FROM project, pstatus, account 
WHERE s_id = project.id_pstatus_fk AND w_id = project.id_worker_fk AND c_id = project.id_client_fk

jednak, błąd nie zniknął.

1

A masz na pewno taka kolumnę? Spróbuj używać aliasów przy wybieraniu tabel pstasus AS p, a potem wybieraj p.s_id jeśli to nie pomoże to albo masz w bazie literówke, albo taka kolumna nie istnieje. Sprawdź też czy korzystasz z właściwej bazy....
Edit
Aaaa. W where nie możesz stosować aliasów nadanych w selekcie.uzyj oryginalnej kolumny w where (id_pstatus_pk) i będzie git.

W skrócie - warunki w where są sprawdzane przed tym co masz w selekcie

0
axelbest napisał(a):

A masz na pewno taka kolumnę? Spróbuj używać aliasów przy wybieraniu tabel pstasus AS p, a potem wybieraj p.s_id jeśli to nie pomoże to albo masz w bazie literówke, albo taka kolumna nie istnieje. Sprawdź też czy korzystasz z właściwej bazy....
Edit
Aaaa. W where nie możesz stosować aliasów nadanych w selekcie.uzyj oryginalnej kolumny w where (id_pstatus_pk) i będzie git.

W skrócie - warunki w where są sprawdzane przed tym co masz w selekcie

Ok, rozumiem. Nie wiedziałem o tym. Dzięki za info :)

0
axelbest napisał(a):

A masz na pewno taka kolumnę? Spróbuj używać aliasów przy wybieraniu tabel pstasus AS p, a potem wybieraj p.s_id jeśli to nie pomoże to albo masz w bazie literówke, albo taka kolumna nie istnieje. Sprawdź też czy korzystasz z właściwej bazy....
Edit
Aaaa. W where nie możesz stosować aliasów nadanych w selekcie.uzyj oryginalnej kolumny w where (id_pstatus_pk) i będzie git.

W skrócie - warunki w where są sprawdzane przed tym co masz w selekcie

Mam jeszcze jedno pytanie. W tej tabeli project mam dwa klucze obce id_worker_fk i id_client_fk, oba z nich odwołują się do tabeli account, a konkretnie do pola id_account_pk. Czyli są dwoma różnymi rekordami tej samej tabeli. Każdy rekord w tabeli account ma klucz obcy id_account_group_fk. Chodzi o to, że worker to inne id grupy, a client inne, czy da się to jakoś zrobić, żeby przy wyświetlaniu rekordów z tabeli project jakoś stworzyć zapytanie tak, żeby to rozróżnić? Proszę bardzo o pomoc, znam niestety tylko podstawy SQL'a i nie wiem jak to powiązać w zapytaniu. Pozdrawiam.

1

Prawdopodobnie takie zapytanie będzie wyglądało tak

SELECT `p`.`name` AS `project_name`, `c`.`name` AS `company_name`, `e`.`name` AS `employee_name`
FROM `project` AS `p`
LEFT JOIN `account` AS `c` ON `p`.`id_client_fk` = `c`.`id_account_pk`
LEFT JOIN `account` AS `e` ON `p`.`id_client_fk` = `e`.`id_account_pk

1 użytkowników online, w tym zalogowanych: 0, gości: 1