gpt4 book ai didi

mysql - 这两个mysql查询之间的区别?

转载 作者:可可西里 更新时间:2023-11-01 08:37:41 26 4
gpt4 key购买 nike

我认为这两个查询是相同的。但结果证明,以四个 AND 开始的第一个查询的约束起作用了,返回了许多左连接的错误行。第二个查询的结果看起来是正确的。谁能解释这两个查询之间的区别是什么?这个问题与 this one 类似, 但我 100% 肯定结果是不同的。

       SELECT uinfo.serial_number, uinfo.firmware, upd.objtype, upd.category
FROM UnitInfo uinfo
LEFT JOIN
UnitUpdateInfo upd
ON uinfo.serial_number = upd.serial_number
AND substring(uinfo.serial_number,1,2) NOT IN ('AB','CD','EF','GH')
AND substring(uinfo.serial_number,1,1) NOT LIKE 'M%'
AND upd.objtype ='HEEN'
AND TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(uinfo.firmware, '-', -2), '-', 1)) LIKE '3.0%'


SELECT uinfo.serial_number, uinfo.firmware, upd.objtype, upd.category
FROM UnitInfo uinfo
LEFT JOIN
UnitUpdateInfo upd
ON uinfo.serial_number = upd.serial_number
WHERE substring(uinfo.serial_number,1,2) NOT IN ('AB','CD','EF','GH')
AND substring(uinfo.serial_number,1,1) NOT LIKE 'M%'
AND upd.objtype ='HEEN'
AND TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(uinfo.firmware, '-', -2), '-', 1)) LIKE '3.0%'

[编辑]
第二个查询与:

       SELECT uinfo.serial_number, uinfo.firmware, upd.objtype, upd.category
FROM UnitInfo uinfo
INNER JOIN
UnitUpdateInfo upd
ON uinfo.serial_number = upd.serial_number
WHERE substring(uinfo.serial_number,1,2) NOT IN ('AB','CD','EF','GH')
AND substring(uinfo.serial_number,1,1) NOT LIKE 'M%'
AND upd.objtype ='HEEN'
AND TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(uinfo.firmware, '-', -2), '-', 1)) LIKE '3.0%'

最佳答案

一旦 LEFT JOIN 中的右侧表有字段进行比较,例如WHERE 子句中的相等性,它实际上变成了 INNER JOIN - 在您的查询中,您强制 UnitUpdateInfo 的 objtype 字段 为非 NULL => 连接必须成功。

第一个查询,将所有连接逻辑作为 LEFT JOIN 的一部分,将包括第一个表中的所有行,这些行连接到第二个表中的那些行 - 第二个表字段为 NULL,其中无法加入。

第二个查询将包括第一个表中未连接到第二个表的那些行。

关于mysql - 这两个mysql查询之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432502/

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