如果子节点不存在,则Mysql将行显示为null

时间:2016-05-05 11:40:29

标签: mysql

查询结果

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 

Value Name
22    fld1 
33    fld2
44    fld3 

CONTACTFIELD有5行

FLD1 FLD2 fld3 fld4 fld5

所以如果值不存在,我希望我的查询返回null,例如:

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

我该如何管理?谢谢!

2 个答案:

答案 0 :(得分:3)

使用LEFT JOIN时, second 表中的条件需要进入ON子句:

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 ;

如果他们进入WHERE子句,则会将LEFT JOIN变为INNER JOIN(因为NULL值不符合条件)。

first 表中的条件应该放在WHERE子句中。

答案 1 :(得分:0)

我使用像这样的

的where子句获得解决方案
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

谢谢戈登