gpt4 book ai didi

mysql - 'AND 1'/'AND 0' 在左连接子句中做什么

转载 作者:可可西里 更新时间:2023-11-01 08:04:39 24 4
gpt4 key购买 nike

这里是相关问题的片段

LEFT join tbl_ExpenseReportLineItem erli ON erh.ExpenseReportHeaderID = erli.ExpenseReportHeaderID and 1

根据它是说“和 1”还是“和 0”,我会看到不同的结果。如果需要,我可以提供更多片段,但我希望这有一个简单的通用答案。

编辑:答案帮助很大,但我的 sql 的实际问题是分组依据返回了我不想要的行。 (由于工作相关删除了 sql)。

最佳答案

10 在 MySQL 中与 TRUEFALSE 同义。因此以下条件是相同的:

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 is null,它将始终评估为 TRUE。在 MySQL 中,TRUE OR NULL 的计算结果为 TRUE,因此这可能会允许某些记录进入您的结果集。

关于mysql - 'AND 1'/'AND 0' 在左连接子句中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35308089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com