如何解决这两个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) NOT LIKE \'M%\'
AND upd.objtype =\'HEEN\'
AND TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(uinfo.firmware,\'-\',-2),1)) LIKE \'3.0%\'
SELECT uinfo.serial_number,upd.category
FROM UnitInfo uinfo
LEFT JOIN
UnitUpdateInfo upd
ON uinfo.serial_number = upd.serial_number
WHERE substring(uinfo.serial_number,1)) LIKE \'3.0%\'
[编辑]
第二个查询与:
SELECT uinfo.serial_number,upd.category
FROM UnitInfo uinfo
INNER JOIN
UnitUpdateInfo upd
ON uinfo.serial_number = upd.serial_number
WHERE substring(uinfo.serial_number,1)) LIKE \'3.0%\'
解决方法
LEFT JOIN
中的右侧表一旦具有比较的字段,例如WHERE
子句中的等式,它实际上变成了INNER JOIN
-在您的查询中,您强制UnitUpdateInfo
的objtype
字段为非NULL =>连接必须成功。
第一个查询将所有联接逻辑作为“ 2”的一部分,将包括第一个表中的所有行与第二个表中的那些行的连接-对于第二个表字段,如果不能进行联接,则为NULL。
第二个查询将不包含第一个表中未连接到第二个表的行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。