Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LEFT JOIN trzech tabel z opcjonalnym NULL
Spooky2
post
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 26.06.2007

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


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.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Tutaj chyba bardziej odpowiednie byłoby użycie RIGHT JOIN
Go to the top of the page
+Quote Post
Spooky2
post
Post #4





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 26.06.2007

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


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.
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: 21.08.2025 - 09:07