查询的结果

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行
飞行高度1
飞行高度2
fld3层
fld4型
第五层
因此,如果值不存在,我希望查询返回空:
Value Name
22    fld1
33    fld2
44    fld3
null  fld4
null  fld5

我该怎么办?谢谢您!

最佳答案

使用LEFT JOIN时,第二个表上的条件需要进入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值不符合条件)。
第一个表上的条件应该放在WHERE子句中。

10-08 14:49