Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
Go to the top of the page
+Quote Post
popbart
post
Post #2





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

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


Strzelam (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Teraz poprawilem, w sumie powinny jeszcze JOIN'y byc zamienione miejscami, tak czy tak w JOIN'ach zawsze mam jakas niezna kolumne
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 (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 16.09.2025 - 05:30