2016-05-05 8 views
1

Das Ergebnis derMysql zeigen Zeilen als null, wenn nicht auf das Kind

SELECT CFV.VALUE, CF.NAME 
FROM CONTACTFIELD CF LEFT JOIN 
    CONTACTFIELDVALUE CFV 
    ON CF.ID = CFV.FIELDID AND CF.ORID = CFV.ORID 
WHERE CFV.CONTACTID = 81 AND CFV.ORID = 976 
Abfrage existiert

ist

Value Name 
22 fld1 
33 fld2 
44 fld3 

Die CONTACTFIELD hat 5 Reihen

fld1 fld2 Fld3 fld4 fld5

Deshalb möchte ich meine Abfrage null zurück, wenn der Wert nicht zB existiert:

Value Name 
22 fld1 
33 fld2 
44 fld3 
null fld4 
null fld5 

Wie kann ich das schaffen? Vielen Dank!

Antwort

3

Wenn LEFT JOIN Verwendung Bedingungen auf der Sekunden Tabelle müssen in der ON Klausel gehen:

SELECT CFV.VALUE, CF.NAME 
FROM CONTACTFIELD CF LEFT JOIN 
    CONTACTFIELDVALUE CFV 
    ON CF.ID = CFV.FIELDID AND CF.ORID = CFV.ORID AND 
     CFV.CONTACTID = 81 AND CFV.ORID = 976 ; 

Wenn sie in der WHERE Klausel gehen, dann ist es die LEFT JOIN in eine INNER JOIN (weil NULL Werte verwandelt sich versage die Bedingung).

Bedingungen auf der ersten Tabelle sollte in der WHERE Klausel gehen.

+0

Dieses Mal gibt 400 Zeilen (mit allen Zeilen, in denen CFV.CONTACTID null ist). Ich brauche nur 5 Zeilen – user1022786

+0

@ user1022786. . . Vielleicht möchten Sie eine innere Verbindung. –

+0

Ich bekomme die Lösung mit der Where-Klausel wie folgt SELECT CFV.VALUE, CF.NAME VON CONTACTFIELD CF LINKS CONTACTFIELDVALUE CFV ON CF.ID = CFV.FIELDID UND CF.ORID = CFV.ORID UND CFV.CONTACTID = 81 WHERE CF .ORID = 976 – user1022786

0

erhalte ich die Lösung mit der where-Klausel wie diese

SELECT CFV.VALUE, CF.NAME FROM CONTACTFIELD CF LEFT JOIN CONTACTFIELDVALUE CFV ON CF.ID = CFV.FIELDID AND CF.ORID = CFV.ORID AND CFV.CONTACTID = 81 WHERE CF.ORID = 976 

Danke Gordon

Verwandte Themen