Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] LEFT JOIN
Forum PHP.pl > Forum > Przedszkole
adi456
Witam,

posiadam 3 przykładowe tabele

1.
test1 z kolimnami id, typ
2.
test2 z kolumnami id, nazwa
3.
test3 z kolumnami id, nazwa

i teraz robie następujące zapytanie

SELECT * FROM test1
LEFT JOIN test2 ON test1.id=test2.id AND test1.typ='2'
LEFT JOIN test3 ON test1.id=test3.id AND test1.typ='3'

ogólnie chodziło mi o to żeby pobierać:
- wartość nazwy z test2 tylko gdy wartość z kolumny typ z tabeli test1 jest równe 2
- wartość nazwy z test3 tylko gdy wartość z kolumny typ z tabeli test1 jest równe 3

i niby działa tylko problem polega na tym że tabele test2 i test3 posiadają kolumne o tej samej nazwie "nazwa"
z moich obserwacji wygląda to tak że:
- w przypadku gdy typ=3 wszystko jest ok
- ale gdy typ=2 nazwa jest pusta

wiem że to normalne działanie mysql i można to obejść dodając do zapytania np "... SELECT *, test3.nazwa as nazwa2 FROM ... " ale to nie rozwiązuje mojego problemu.

pomoże ktoś?
trueblue
  1. SELECT IF(test1.typ=3,test3.nazwa,IF(test1.typ=2,test2.nazwa,test1.nazwa)) FROM test1
  2. LEFT JOIN test2 ON test1.id=test2.id
  3. LEFT JOIN test3 ON test1.id=test3.id

Ewentualnie użycie CASE.
adi456
dzięki wielkie śmiga, zrobiłem tak żeby było czytelniej bo twój przykład coś nie mógł mi zatrybić

SELECT *, IF(test1.typ=2,test2.nazwa,test3.nazwa) as nazwa FROM test1
LEFT JOIN test2 ON test1.id=test2.id
LEFT JOIN test3 ON test1.id=test3.id
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.