有两个表:客户和订单。客户可以有一个或多个订单。我想了解执行速度方面的差异。任何想法对我来说都有用,可以更好地理解它。所以,感谢所有回答的人。
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
答案 0 :(得分:3)
第一个将充当INNER JOIN
。当您在where
子句中过滤右表时,将会过滤右表中不匹配的NULL
记录,因为anything
= NULL
将失败
第二个将作为LEFT JOIN
。在连接条件AND orders.status = 1
中表示要与左表连接的记录
关于性能的问题,如上所述,两个查询都不一样,所以你无法真正比较性能
答案 1 :(得分:0)
第一个变为INNER JOIN
,因为对于不匹配的行,orders.customer_id
为NULL
。因此WHERE
子句将过滤掉所有这些。