MySQL JOIN - nie umiem zapytać o to czego chcę ;)

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
youlleck
Sędziwy Jeż
Sędziwy Jeż
Posty: 62
Rejestracja: 01 lut 2008, 00:19
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64
Kontakt:

MySQL JOIN - nie umiem zapytać o to czego chcę ;)

Post autor: youlleck »

Mam mniej więcej takie tabele:

languages
------------
| id | name |
------------
| 1 | Polski |
| 2 | English|
| 3 |Deutsch|
-------------

shipping_names
|-------------------------------------|
| id | shipping_id | name | language_id |
---------------------------------------
| 1 | 1 | bla | 1 |
| 2 | 1 | wlw | 2 |
| 3 | 2 | agag | 3 |
---------------------------------------

Chcę utworzyć zapytanie, które zawsze zwróci tyle wierszy ile ma tabela languages w zależności od shipping_id w tabeli shipping_names. Czyli przykładowo dla shipping_id=1 potrzebuję to:

|--------------------------------------------|
| id | name | shipping_id | name | language_id |
----------------------------------------------
| 1 | Polski | 1 | bla | 1 |
| 2 | English| 1 | wlw | 2 |
| 3 |Deutsch| null | null | null |
-----------------------------------------------

Próbowałem z zapytaniem w stylu:

Kod: Zaznacz cały

SELECT l.id AS lid, l.name AS lname, s.* FROM languages l LEFT JOIN shipping_names s ON l.id=s.language_id WHERE s.shipping_id IS NULL OR s.shipping_id=1
Problem polega na tym, że nie zwraca to oczekiwanego przeze mnie wyniku. Dostaję powyższą tabelę bez ostatniego wiersza, gdyż dla deutscha jest już wpis w tabeli shipping_names dla innego shipping_id. Gdyby go usunąć wszystko działa prawidłowo.

Proszę o pomoc w odpowiednim sformułowaniu zapytania :)
pozdrawiam!
Problem rozwiazany? Dodaj [SOLVED] do tytulu watku!

Best4Linux.NET - sprawdz czy twoj sprzet zadziala pod Linuksem!
Awatar użytkownika
el.pescado
Zakręcona Traszka
Zakręcona Traszka
Posty: 734
Rejestracja: 26 maja 2005, 11:43
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: MySQL JOIN - nie umiem zapytać o to czego chcę ;)

Post autor: el.pescado »

Wrzuć gdzieś skrypt SQL który tworzy strukturę bazy (CREATE TABLE...) i wstawia tam przykładowe dane (INSERT INTO...), żeby ludzie mogli się pobawić. A tabelki można umiścić w [ code ], żeby się lepiej wyświetlały.

EDIT:
PS. Jeżeli chcesz, żeby w zbiorze wyników znalazły się krotki dla których nie ma odpowiednich wierszy w "dołączanej" tabeli, spróbuj użyć OUTER JOIN.
Awatar użytkownika
youlleck
Sędziwy Jeż
Sędziwy Jeż
Posty: 62
Rejestracja: 01 lut 2008, 00:19
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64
Kontakt:

Odp: MySQL JOIN - nie umiem zapytać o to czego chcę ;)

Post autor: youlleck »

Problem rozwiązałem w inny, prostszy sposób - zamiast usilnie próbować jednym, sprawę załatwiłem dwoma zapytaniami :)
Problem rozwiazany? Dodaj [SOLVED] do tytulu watku!

Best4Linux.NET - sprawdz czy twoj sprzet zadziala pod Linuksem!
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 21 gości