1和0在MySQL中是TRUE和FALSE的同义词.因此,以下条件相同:
erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID AND 1
erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID AND TRUE
erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID
并且以下条件也相同:
erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID AND 0
erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID AND FALSE
FALSE
当您在LEFT JOIN中使用1时,您将在以下条件下加入
erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID
当您使用0时,您将不会从第二个表中获得任何匹配的记录.具体来说,将出现tbl_ExpenseReportHeader表中的每个记录,但是tbl_ExpenseReportLineItem表中的列都将显示为NULL,因为每个记录的连接条件均为FALSE.
更新:
您获得带有联接条件的记录的原因
ON erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID AND 0
ON erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID AND FALSE
ON FALSE
这是因为您的WHERE子句中有一个条件,即使每个记录的erli.*都为NULL,该条件的值仍为TRUE:
WHERE ... erli.StatusExport != 'EXPF' OR erli.ExportDate >= '2315-11-11 00:00:00'
OR erli.ExportDate = '2900-01-01 00:00:00' OR erli.ExportDate is null
此处的关键条件是erli.ExportDate为null,它将始终评估为TRUE.在MySQL中,TRUE或NULL的计算结果为TRUE,因此这可能会允许某些记录进入您的结果集中.