Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z użyciem FULL OUTER JOIN
Forum PHP.pl > Forum > Bazy danych > MySQL
Pilsener
Witajcie, mam niby prosty problem, takie zapytanko:
  1. SELECT cel.id,cel.ilosc_cel,wykonanie.id,wykonanie.ilosc
  2. FROM cel OUTER JOIN wykonanie ON cel.id = wykonanie.id
- gdyż nie każda pozycja może mieć wykonanie (wtedy nie wpada do bazy, bo po co puste rekordy?), jak i nie każdy koszt jest planowany, czyli powinno dać coś w rodzaju:

ID-Plan-Wykonanie
1-3-null
4-null-4
7-2-3
8-null-5

Niestety nie działa (próbowałem też FULL OUTER JOIN), wyskakuje błąd 1064 (składni) . Natomiast RIGHT i LEFT działa bez problemu. Czy to możliwe, żeby w mysql nie działało coś tak oczywistego? A może ja knocę proste zapytanie? W takim razie czy da się to jakoś inaczej napisać, bez użycia tego outer joina? Będę wdzięczny za pomoc.
pest
Nie doszukałem się w MySQL wsparcia dla FULL OUTER JOIN... ale pozostają alternatywy - chociażby przerobiony dla Twoich potrzeb przykład z wikipedii

  1. SELECT cel.id,cel.ilosc_cel,wykonanie.id,wykonanie.ilosc
  2. FROM cel LEFT JOIN wykonanie ON cel.id = wykonanie.id
  3. UNION
  4. SELECT cel.id,cel.ilosc_cel,wykonanie.id,wykonanie.ilosc
  5. FROM cel RIGHT JOIN wykonanie ON cel.id = wykonanie.id
  6. WHERE cel.id IS NULL;



Chyba, że jest prostszy sposób na uzyskanie tej funkcjonalności w MySQL.. ja nie znalazłem.
Pilsener
Działa, ale jest niestety jeszcze jeden problem, o którym zapomniałem wspomnieć - id mogą się powtarzać, bo każdy koszt ma swoje id i wpada do bazy wiele razy (pod inną datą oczywiście), więc dojdzie grupowanie i sumowanie - jak się za to zabrać w tym przypadku?
misiek172
jak już połączysz tabele LEFT JOIN to wygląda to tak jakby to była jedna tabela, więc wystarczy dodać SUM i GROUP BY
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.