这两个查询之间有什么区别(条件位置)?

时间:2014-05-15 14:16:15

标签: mysql join where-clause

首先查询:

SELECT SUM(Rent.paid) AS Rent__summed_rents 
FROM rents AS Rent 
LEFT JOIN contracts ON contracts.id = Rent.id 
LEFT JOIN units ON contracts.unit_id = units.id AND units.owner_id = 29

第二次查询:

SELECT SUM(Rent.paid) AS Rent__summed_rents 
FROM rents AS Rent 
LEFT JOIN contracts ON contracts.id = Rent.id 
LEFT JOIN units ON contracts.unit_id = units.id
WHERE units.owner_id = 29

我应该指出结果不一样!

1 个答案:

答案 0 :(得分:4)

区别在于过滤条件。

例如,在第一个查询中,无论其中一个连接是否实际产生记录,它都将选择sum(rent.paid)。这里的好处是,如果您需要数据而不管连接是否正常工作,但是想要过滤连接,那么您可以将条件过滤器放在join子句本身上。

在第二个查询中,条件过滤器位于where,如果加入工作(即使它们是左连接),将生成sum(rent.paid)