Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN i skladnia SQL 2003
Forum PHP.pl > Forum > Bazy danych > MySQL
Sh4dow
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.
popbart
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
Sh4dow
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
popbart
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
SongoQ
Odnosnie ilosc dolaczen tabel to pamietam z wykladow z baz ze od 5 spada wydajnosc.
Sh4dow
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.