Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LEFT JOIN i skladnia SQL 2003, 'unknown column'
Sh4dow
post
Post #1





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Przy zapytaniu w miare prostym
  1. SELECT p.*, d.kod AS dzial, d.nazwa AS dzial_nazwa, k.opis AS kategoria, k.kod AS kod_kategorii, k.id_wp AS id_wp, k.id_onet AS id_onet, n.nazwa AS nadkategoria, n.id AS id_nk
  2. FROM produkty AS p, dzialy AS d
  3. LEFT JOIN nadkategorie AS n ON n.id = k.id_nk
  4. LEFT JOIN kategorie AS k ON k.id = p.id_kat
  5. WHERE p.id = 1 AND d.id = p.id_dzial
  6. GROUP BY p.id

dostaje wiadomosc:
Cytat
#1054 - Unknown column 'k.id_nk' in 'on clause'

Dla niepelno sprytnych ziomkow te kolumny istnieja !

Po zgloszeniu buga chodzi o pewna zmiane przy wersji 5.0.12, niestety ja uzywalem 5.0.11 (beta) i po przejsciu na 5.0.16 otrzymuje wyzej wymieniony blad.

Odpowiedz jaka otrzymalem jest ponizej

Cytat
#Incompatible change: Beginning with MySQL 5.0.12, natural joins and joins with USING, including outer join variants, are processed according to the SQL:2003 standard. The changes include elimination of redundant output columns for NATURAL joins and joins specified with a USING clause and proper ordering of output columns. (Bug #6136, Bug #6276, Bug #6489, Bug #6495, Bug #6558, Bug #9067, Bug #9978, Bug #10428, Bug #10646, Bug #10972.) The precedence of the comma operator also now is lower compared to JOIN. (Bug #4789, Bug #12065, Bug #13551.)

These changes make MySQL more compliant with standard SQL. However, they can result in different output columns for some joins. Also, some queries that appeared to work correctly prior to 5.0.12 must be rewritten to comply with the standard. For details about the scope of the changes and examples that show what query rewrites are necessary, see Section 13.2.7.1, “JOIN Syntax”.


Czyli zaczynaja stosowac standardy SQL:2003 ktore troche mi popsuly cala aplikacje. To jest jedyne zapytanie z JOIN'ami ktore wywala mi taki blad. Po przenalizowaniu nowej składni nie potrafie poprawic tego zapytania. Czy ktos zapoznawal sie z tym problemem ? Probowalem uzywac słów USING, NATURAL JOIN w roznych kombinacjach, ale nic nie przechodzi.

Bede wielce wdzieczny jesli ktos chociaz naprowadziłby mnie w odpowiednim kierunku. Nie stety zapytanie powinno dzialac w baaardzo podobnej, a najlepiej nie zmienionej formie.

Ten post edytował Sh4dow 28.11.2005, 09:19:47


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
popbart
post
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


Strzelam smile.gif
  1. ...
  2. dzialy AS d
  3. LEFT JOIN nadkategorie AS n ON n.id = p.id_nk

Łączysz dział z nadkategorią a odwołujesz się do klucza z produktów


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post
Sh4dow
post
Post #3





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Nie nie nie, sorki, literowka, przy przepisywaniu smile.gif
Teraz poprawilem, w sumie powinny jeszcze JOIN'y byc zamienione miejscami, tak czy tak w JOIN'ach zawsze mam jakas niezna kolumne


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post
popbart
post
Post #4





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


W tym miejscu łączysz dział z nadkategorią za pomocą kluczy z nadkategorii i kategorii biggrin.gif
  1. FROM produkty AS p, dzialy AS d
  2. LEFT JOIN nadkategorie AS n ON n.id = k.id_nk

Zrób sobie takie schodki, a się nie pomylisz. Każde następne połączenie musi mieć klucz w poprzednich połączeniach.
  1. SELECT p.*, d.kod AS dzial, d.nazwa AS dzial_nazwa, k.opis AS kategoria, k.kod AS kod_kategorii, k.id_wp AS id_wp, k.id_onet AS id_onet, n.nazwa AS nadkategoria, n.id AS id_nk
  2. FROM ((produkty AS p
  3. LEFT JOIN kategorie AS k ON p.id_kat=k.id )
  4. LEFT JOIN nadkategorie AS n ON k.id_nk=n.id)
  5. LEFT JOIN dzialy AS d.......itd
  6. WHERE p.id = 1 AND d.id = p.id_dzial
  7. GROUP BY p.id


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post
SongoQ
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Odnosnie ilosc dolaczen tabel to pamietam z wykladow z baz ze od 5 spada wydajnosc.


--------------------
Go to the top of the page
+Quote Post
Sh4dow
post
Post #6





Grupa: Zarejestrowani
Postów: 569
Pomógł: 0
Dołączył: 17.08.2003
Skąd: Dąbrowa Górnicza

Ostrzeżenie: (0%)
-----


Rzeczywiscie pomoglo, Nie podejzewalem ze tak mozna by laczyc tablice z joinami, chodzi mi o nawiazy.
W sumie rozwiazalem to tez inny sposob przez zdjecie jednego Joina, ale wychodzilo na to ze zdazaly sie bledy i nie otrzymywalem prawidlowego wyniku.

jeszcze raz dziekuje smile.gif


--------------------
Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota
Zarządzaj swoim budżetem domowym
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 10:16