2017-06-06 4 views
2

Ich kann mir nicht vorstellen, wie Abfrage zu erstellen. Ich brauche Zeilen aus der Tabelle wählen CONTENT die Spalte nicht hat tmplvarid = 8 in der linken Spalte TEMPLATE VARIABLESWie Zeilen mit LINKEN JOIN auswählen, wenn der angegebene Wert in der verbundenen Tabelle vorhanden ist?

SELECT con.id, con.alias, tv.tmplvarid FROM modx_site_content as con LEFT JOIN modx_site_tmplvar_contentvalues as tv ON con.id=tv.contentid WHERE con.deleted=0 AND (con.content IS NULL OR con.content='') AND con.template=5 AND tv.tmplvarid!=8/*not contains 8*/

Erklärung beigetreten: https://i.stack.imgur.com/gdgha.png

+1

Und was ist los mit Ihrer aktuellen Abfrage? – Shadow

Antwort

1

Ganz einfach: Tu das nicht ein INNER beitreten, tun ein OUTER JOIN statt:

SELECT con.id, con.alias, tv.tmplvarid FROM modx_site_content as con 
    LEFT OUTER JOIN modx_site_tmplvar_contentvalues as tv ON con.id=tv.contentid 
     AND tv.templvarid = 8 
     WHERE con.deleted=0 AND (con.content IS NULL OR con.content='') 
    AND con.template=5 AND tv.contentid IS NULL 

Also verbinden Sie sich für templvarid = 8 in einem OUTER JOIN - und wählen Sie dann (in where) nur die Zeilen, die NULL in tv haben. contentid (das sind die, wo nicht templvarid 8 für Join gefunden werden konnte)

Verwandte Themen