这两个mysql查询之间的区别?
|
我以为这两个查询是相同的。但是结果表明,第一个查询的约束条件是从四个有效的AND开始,返回了许多带有左联接的错误行。第二个查询中的结果看起来正确。
谁能解释这两个查询之间的区别?
这个问题与此类似,但是我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%\'
没有找到相关结果
已邀请:
1 个回复
嫩昧竞莫
中的右侧表一旦具有比较的字段,例如
子句中的等式,它实际上变成了
-在您的查询中,您强制
的
字段为非NULL =>连接必须成功。 第一个查询将所有联接逻辑作为“ 2”的一部分,将包括第一个表中的所有行与第二个表中的那些行的连接-对于第二个表字段,如果不能进行联接,则为NULL。 第二个查询将不包含第一个表中未连接到第二个表的行。