这两个左连接sql查询之间的区别是什么?

时间:2017-02-04 14:54:10

标签: mysql sql performance

有两个表:客户和订单。客户可以有一个或多个订单。我想了解执行速度方面的差异。任何想法对我来说都有用,可以更好地理解它。所以,感谢所有回答的人。

1)

SELECT `customers`.* FROM `customers`
 LEFT JOIN `orders` ON `orders`.`customer_id` = `customers`.`id`
 WHERE `orders`.`status` = 1

2)

SELECT `customers`.* FROM `customers`
 LEFT JOIN `orders` ON `orders`.`customer_id` = `customers`.`id` AND `orders`.`status` = 1

2 个答案:

答案 0 :(得分:3)

第一个将充当INNER JOIN。当您在where子句中过滤右表时,将会过滤右表中不匹配的NULL记录,因为anything = NULL将失败

第二个将作为LEFT JOIN。在连接条件AND orders.status = 1中表示要与左表连接的记录

关于性能的问题,如上所述,两个查询都不一样,所以你无法真正比​​较性能

答案 1 :(得分:0)

第一个变为INNER JOIN,因为对于不匹配的行,orders.customer_idNULL。因此WHERE子句将过滤掉所有这些。