首先查询:
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
我应该指出结果不一样!
答案 0 :(得分:4)
区别在于过滤条件。
例如,在第一个查询中,无论其中一个连接是否实际产生记录,它都将选择sum(rent.paid)
。这里的好处是,如果您需要数据而不管连接是否正常工作,但是想要过滤连接,那么您可以将条件过滤器放在join子句本身上。
在第二个查询中,条件过滤器位于where,如果加入工作(即使它们是左连接),仅将生成sum(rent.paid)