2016-08-03 18 views
1

Ich habe eine ziemlich länger Abfrage aber ich dies vereinfacht:Welche Art von JOIN sollte ich hier verwenden?

SELECT p.ref, pl.name 
FROM tpv_products p 
LEFT JOIN tpv_products_languages pl 
ON p.id = pl.tpv_products_id 
WHERE pl.tpv_languages_id = 2; 

Dies sind die Tabellen:

tpv_products:

id | ref 
-------- 
1 | ref1 
2 | ref2 
3 | ref3 

tpv_products_language:

tpv_languages_id | tpv_products_id | name 
--------------------------------------------- 
1    | 1    | Rice 
1    | 2    | Corn 
1    | 3    | Milk 
2    | 1    | Arroz 

Was ich bekomme mit meiner Frage:

ref | name 
---------- 
ref1| Arroz 

Was ich erwartet hatte:

ref | name 
---------- 
ref1| Arroz 
ref2| NULL 
ref3| NULL 

Ich habe versucht, alle Arten von JOINS aber nicht das gewünschte Ergebnis finden.

+1

Der 'where' Zustand verwandelt Ihr' links join' in eine 'inneren join', weil Sie auf Daten in der verknüpften Tabelle filtern. Wenn Sie die Bedingung in die On-Klausel des Joins setzen, wird das erwartete Ergebnis zurückgegeben –

Antwort

2

Gerade Bedingung hinzufügen mit beitreten pl.tpv_languages_id = 2

SELECT p.ref, pl.name 
FROM tpv_products p 
LEFT JOIN tpv_products_languages pl 
ON p.id = pl.tpv_products_id AND pl.tpv_languages_id = 2; 
Verwandte Themen