Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN trzech tabel z opcjonalnym NULL
Forum PHP.pl > Forum > Bazy danych > MySQL
Spooky2
Witam. Kiepski jestem w tym temacie sad.gif Mam problem chyba z dosyć prostą sprawą - połączeniem głównej tabeli zawierająćej klucze obce z 3 innymi tabelami.
Problem jest tego typu, iż tylko jeden z trzech kluczy w głowej tabeli zawsze przybiera jakąś wartość, natomiast pozostałe dwa klucze obce mogą przyjmować (choć nie muszą) NULL.
  1. SELECT * FROM klienci_umowy
  2. LEFT JOIN (opcje_t1, opcje_t2, rodzaje_umowy
  3. ) ON
  4. ( klienci_umowy.id_opcji_t1 = opcje_t1.id_opcji_t1
  5. AND klienci_umowy.id_opcji_t2 = opcje_t2.id_opcji_t2
  6. AND klienci_umowy.id_rodzaju_um_t1 = rodzaje_umowy.id_rodzaju_umowy)


klucze w tabeli klienci_umowy tj. id_opcji_t2, id_opcji_t3 (tutaj akurat nie ma) moga miec jakas wartosc, ale rownie dobrze moga byc puste. Natomiast id_opcji_t1 zawsze przyjmuje jakas wartosc. W wyniku powiazan, w przypadku, gdy wartosc klienci_umowy.id_opcji_t2 ma wartosc nULL, wszystkie pola z tabeli opcje_t1 i opcje_t2 przyjmuja wartosc NULL, co oczywiscie jest bledem.. powinno zwrocic wartosci w polach tabeli opcje_t1, a NULL opcje_t2 (jesli klienci_umowy.id_opcji_t2 mialo bylo puste) Jak to poprawic?
Damonsson
Ciężko zrozumieć o co Ci chodzi, ale o ile dobrze wywnioskowałem to

  1. SELECT * FROM klienci_umowy
  2. JOIN opcje_t1 ON klienci_umowy.id_opcji_t1 = opcje_t1.id_opcji_t1
  3. JOIN opcje_t2 ON klienci_umowy.id_opcji_t2 = opcje_t2.id_opcji_t2
  4. JOIN rodzaje_umowy ON klienci_umowy.id_rodzaju_um_t1 = rodzaje_umowy.id_rodzaju_umowy


Wtedy pobierać Ci będzie tylko z tych tabel, gdzie się zgadzają klucze, o ile o to chodziło.
Pyton_000
Tutaj chyba bardziej odpowiednie byłoby użycie RIGHT JOIN
Spooky2
Cytat(Damonsson @ 7.07.2014, 14:49:31 ) *
Ciężko zrozumieć o co Ci chodzi, ale o ile dobrze wywnioskowałem to

  1. SELECT * FROM klienci_umowy
  2. JOIN opcje_t1 ON klienci_umowy.id_opcji_t1 = opcje_t1.id_opcji_t1
  3. JOIN opcje_t2 ON klienci_umowy.id_opcji_t2 = opcje_t2.id_opcji_t2
  4. JOIN rodzaje_umowy ON klienci_umowy.id_rodzaju_um_t1 = rodzaje_umowy.id_rodzaju_umowy


Wtedy pobierać Ci będzie tylko z tych tabel, gdzie się zgadzają klucze, o ile o to chodziło.


Wielkie dzięki. Po użyciu LEFT JOIN w podaym przez Ciebie zapytaniu wyniki zwraca tak jak chciałem. Czyli jeśli klienci_umowy.id_opcji_t2 jest NULL, to zwroci tabele zaweirajaca NULL. Powyzszy JOIN tak jak piszesz zwracalby wynik TYLKO gdyby klienci_umowy.id_opcji_t2 mialo powiazanie z tabela opce_t2 a nie o to do końca chodziło.
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.