Left Join不返回Null或Non-matching值

时间:2016-08-10 20:05:06

标签: mysql sql

我想从PF_OUTPUT返回所有值,其中令牌ID等于“AdmissionInfo”以及PF_RESULTS的匹配结果仅用于PAT_SEQ = 105566168。

我已经查看了其他一些问题,并且我在Left join where子句中包含了null语句,但它仍然只是返回匹配的值。

    SELECT CCDEV.PF_OUTPUT.TOKEN_NAME,
  CCDEV.PF_OUTPUT.DISPLAY_SEQ,
  CCDEV.PF_OUTPUT.RES_SEQ,
  CCDEV.PF_OUTPUT.LABEL_SEQ,
  CCDEV.PF_OUTPUT.DISPLAY_RESULT_NAME,
  CCDEV.PF_OUTPUT.OUTPUT_RESULT_NAME,
  CCDEV.PF_OUTPUT.OUTPUT_FIELD_NAME,
  PF_RESULTS.PERFORM_DDT,
  PF_RESULTS.CHART_DDT,
  PF_RESULTS.STAFF_SEQ,
  PF_RESULTS.RESULT_VALUE,
  PF_RESULTS.STATUS,
  PF_RESULTS.PF_RESULTS_SEQ,
  PF_RESULTS.PAT_SEQ,
  PF_RESULTS.PF_RESULT_SEQ,
  PF_RESULTS.RECORD_VERSION,
  PF_RESULTS.LABEL_SEQ AS LABEL_SEQ1
FROM CCDEV.PF_OUTPUT
LEFT JOIN PF_RESULTS
ON CCDEV.PF_OUTPUT.LABEL_SEQ      = PF_RESULTS.LABEL_SEQ
AND CCDEV.PF_OUTPUT.RES_SEQ       = PF_RESULTS.RES_SEQ
WHERE (CCDEV.PF_OUTPUT.TOKEN_NAME = 'AdmissionInfo'
AND PF_RESULTS.PAT_SEQ            = 105566168)
OR (CCDEV.PF_OUTPUT.TOKEN_NAME    = 'AdmissionInfo'
AND PF_RESULTS.PAT_SEQ           IS NULL)
ORDER BY CCDEV.PF_OUTPUT.TOKEN_NAME,
  CCDEV.PF_OUTPUT.DISPLAY_SEQ

2 个答案:

答案 0 :(得分:1)

将PF_RESULTS.PAT_SEQ = 105566168行从您的where条件移动到您的ON子句。

    SELECT CCDEV.PF_OUTPUT.TOKEN_NAME,
  CCDEV.PF_OUTPUT.DISPLAY_SEQ,
  CCDEV.PF_OUTPUT.RES_SEQ,
  CCDEV.PF_OUTPUT.LABEL_SEQ,
  CCDEV.PF_OUTPUT.DISPLAY_RESULT_NAME,
  CCDEV.PF_OUTPUT.OUTPUT_RESULT_NAME,
  CCDEV.PF_OUTPUT.OUTPUT_FIELD_NAME,
  PF_RESULTS.PERFORM_DDT,
  PF_RESULTS.CHART_DDT,
  PF_RESULTS.STAFF_SEQ,
  PF_RESULTS.RESULT_VALUE,
  PF_RESULTS.STATUS,
  PF_RESULTS.PF_RESULTS_SEQ,
  PF_RESULTS.PAT_SEQ,
  PF_RESULTS.PF_RESULT_SEQ,
  PF_RESULTS.RECORD_VERSION,
  PF_RESULTS.LABEL_SEQ AS LABEL_SEQ1
FROM CCDEV.PF_OUTPUT
LEFT JOIN PF_RESULTS
ON CCDEV.PF_OUTPUT.LABEL_SEQ      = PF_RESULTS.LABEL_SEQ


   AND CCDEV.PF_OUTPUT.RES_SEQ       = PF_RESULTS.RES_SEQ

 AND PF_RESULTS.PAT_SEQ            = 105566168

    WHERE (CCDEV.PF_OUTPUT.TOKEN_NAME = 'AdmissionInfo')
    OR (CCDEV.PF_OUTPUT.TOKEN_NAME    = 'AdmissionInfo'
    AND PF_RESULTS.PAT_SEQ           IS NULL)
    ORDER BY CCDEV.PF_OUTPUT.TOKEN_NAME,
      CCDEV.PF_OUTPUT.DISPLAY_SEQ

当您在LEFT联接的右表中包含一列时,您基本上消除了LEFT联接并使其成为内连接。除非你说RIGHTTable.column在哪里是空的。

答案 1 :(得分:1)

看起来你在where子句中使用了左连接表。这有效地使它成为内连接,因为任何不存在的记录总是会产生错误。

除非在where子句中的检查包括'is null'检查。

您应该将PF_RESULTS.PAT_SEQ = 105566168支票移至on的{​​{1}}条款以解决此问题。