如果连接表中存在指定值,如何选择LEFT JOIN行?

时间:2017-06-06 14:44:42

标签: mysql sql left-join contains

我无法想象如何构建查询。我需要从表CONTENT中选择 hasn' tmplvarid = 8 在左侧加入TEMPLATE VARIABLES

中的行

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*/

说明:https://i.stack.imgur.com/gdgha.png

1 个答案:

答案 0 :(得分:1)

简单:不要进行 INNER 加入,而是执行 OUTER JOIN

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

所以你在OUTER JOIN中加入templvarid = 8 - 然后选择(在哪里)只有在tv中有NULL的行。 contentid(那些没有找到templvarid 8的人可以加入)