Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Prosty join trzech tabel
Forum PHP.pl > Forum > Przedszkole
alekto
Cześć,

Mam 3 tabele. Potrzebuję je połączyć w taki sposób, by uzyskać wyniki, które spełniają przynajmniej jeden z warunków łączenia (z tabelą2 lub tabelą3).

Czyli jeśli:
ID występuje w tabeli1 oraz w tabeli2 - chcę taki wynik.
ID występuje w tabeli1 oraz w tabeli3 - chcę taki wynik.
ID występuje w tabeli1, w tabeli2 oraz w tabeli3 - chcę taki wynik.

ID występuje tylko w tabeli1 - nie chcę.

  1. SELECT
  2. FROM tabela1 AS a
  3. JOIN tabela2 AS b ON b.id=a.a_b
  4. JOIN tabela3 AS c ON c.id=a.a_c


To pewnie dla Was jest dziecinnie proste, ale nie mam doświadczenia i nawet nie wiem jak tego poszukać.
Warunek exists odpada (potrzebuję wyciągnąć z tabeli2 / tabeli3 określone kolumny).

Dzięki
A
freemp3
Użyj LEFT JOIN i dodaj odpowiedni warunek w WHERE, sprawdzasz czy kolumny z tabeli drugiej oraz trzeciej są puste (IS_NULL)
ilies
Mogę się mylić, ale logicznie tak to powinno działać, nie próbowałem czegoś takiego robić nigdy.
  1. SELECT *
  2. FROM tabela1 AS a
  3. LEFT JOIN tabela2 AS b ON b.id=a.a_b
  4. LEFT JOIN tabela3 AS c ON c.id=a.a_c
  5. WHERE (a.id = x AND b.id=x) OR (a.id = x AND c.id = x) OR (b.id = x AND c.id = x) OR (a.id = x OR b.id = x OR c.id = x)
alekto
freemp3 - albo ja Cię źle zrozumiałam, albo Ty mnie, w każdym razie nie pomogło.

ilies - działa! Dzięki.
W sumie miałam tylko jeden warunek dla tabeli2 i 3 warunki dla tabeli3, więc docelowo wygląda to tak (może się komuś przyda)

  1. SELECT *
  2. FROM tabela1 AS a
  3. LEFT JOIN tabela2 AS b ON b.id=a.a_b
  4. LEFT JOIN tabela3 AS c ON c.id=a.a_c
  5. WHERE (b.id=x) OR (c.id > 2 AND c.id < 10 AND c.id != 4)
freemp3
Chodziło mi o coś takiego:
Kod
SELECT *
FROM tabela1 AS a
LEFT JOIN tabela2 AS b ON b.id=a.a_b
LEFT JOIN tabela3 AS c ON c.id=a.a_c
WHERE b.id IS NOT NULL OR c.id IS NOT NULL
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.