Strona 1 z 1

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

: 04 sie 2010, 14:38
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!

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

: 05 sie 2010, 19:05
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.

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

: 06 sie 2010, 10:18
autor: youlleck
Problem rozwiązałem w inny, prostszy sposób - zamiast usilnie próbować jednym, sprawę załatwiłem dwoma zapytaniami :)