Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pusty rekord
Forum PHP.pl > Forum > Bazy danych > MySQL
mimol
Mam dwie tabele które wyglądają tak:
tabela pracodawcy

id....|miasto_id.......|nazwa...........
1.....|1....................|Budo-remont
2.....|4....................|HiTech
3.....|3....................|Studentowo
4.....|5....................|Szop-Pracz
5.....|2....................|Telefonika S.A.
6.....|1....................|Interneto sc.
7.....|1....................| Poczta Misiowa

tabela miasta

id....|nazwa.........|ludnosc
1.....|Pcim dolny...|1234
2.....|Mala wies....|310
3.....|Dwor...........|55000
4.....|Stolicowo....|3000000
5.....|Srednia wies|7235
6.....|Polakowo....|345000

chciałbym wyświetlić nazwę miasta + nazwa firmy
dając takie zapytanie
Kod
select t1.nazwa, t2.nazwa as nazwa_firmy from miasta t1 inner join pracodawcy t2 on t1.id=t2.miasto_id

Jest prawie dobrze jednak nie otrzymuje rekordu z miastem Polakowo w którym nie pracuje żadna firma..
Jak powinno wyglądać to zapytanie żeby była nazwa miasta i np puste miejsce na firme?

Znalazłem sam odpowiedź wystarczyło zamienić z inner join na left join
cojack
A wiesz w ogóle dlaczego wystarczyło zmienić z inner join na left join? Bo mi się nie wydaje.

INNER JOIN - nie zwraca wiersza gdy nie znajdzie dopasowania.
LEFT JOIN - dołącza wyniki z lewej kolumny mimo iż nie znajdzie powiązania z prawą kolumną, resztę NULLuje
RIGHT JOIN - na odwrót jak left join
FULL JOIN - zwróci wiersze jak znajdzie w którejkolwiek tabel.
mimol
Zadanie.
Wypisz ile firm ma swoje siedziby w danym mieście. Rozwiązaniem zadania powinien być wynik wyświetlony w dwóch kolumnach: nazwa miasta + ilość firm w danym mieście. Dane mają być posortowane malejąco (największa ilość pierwsza) po ilości firm w mieście. Nazwy zwracanych pól to odpowiednio: nazwa oraz ilosc

moje zapytanie
  1. select t1.nazwa, t2.nazwa as nazwa_firmy, COUNT(t1.nazwa) as ilosc from miasta t1 left join pracodawcy t2 on t1.id=t2.miasto_id group by t1.nazwa

jak widać w Polakow`ie nie pracuje żadna firma.
Więc udało mi się to zrobić tak jak wyżej.
lub
  1. select t1.nazwa, t2.nazwa as nazwa_firmy, COUNT(t1.nazwa) as ilosc from miasta t1 inner join pracodawcy t2 on t1.id=t2.miasto_id group by t1.nazwa

ale wtedy nie pokazuje Polakowa

Jak zrobić żeby pokazał Polakowo ilosc = 0?
nospor
COUNT masz robic po pracodawcach. Przeciez to ich zliczasz a nie miasta.

  1. SELECT t1.nazwa, t2.nazwa AS nazwa_firmy, COUNT(t2.id) AS ilosc FROM miasta t1 LEFT JOIN pracodawcy t2 ON t1.id=t2.miasto_id GROUP BY t1.nazwa
mimol
Dzięki
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.