mysql and 1=1_mysql-左联接on子句中的“ AND 1” /“ AND 0”...

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,因此这可能会允许某些记录进入您的结果集中.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值