mysql-左联接on子句中的“ AND 1” /“ AND 0”做什么
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-左联接on子句中的“ AND 1” /“ AND 0”做什么,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1564字,纯文字阅读大概需要3分钟。
内容图文
![mysql-左联接on子句中的“ AND 1” /“ AND 0”做什么](/upload/InfoBanner/zyjiaocheng/885/566579c2b8ae47b98ac8e29dc2624936.jpg)
这是相关问题的摘要
LEFT join tbl_ExpenseReportLineItem erli ON erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID and 1
根据显示的是“和1”还是“和0”,我看到了不同的结果.如果需要,我可以提供更多代码段,但我希望它有一个简单的通用答案.
编辑:答案极大地帮助了,但是我的sql的实际问题是该group by返回了我不想要的行. (已删除sql,因为与工作相关).
解决方法:
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,因此这可能会允许某些记录进入您的结果集中.
内容总结
以上是互联网集市为您收集整理的mysql-左联接on子句中的“ AND 1” /“ AND 0”做什么全部内容,希望文章能够帮你解决mysql-左联接on子句中的“ AND 1” /“ AND 0”做什么所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。