开发者

MySQL: different results with a WHERE statement included in master-detail query?

开发者 https://www.devze.com 2023-03-22 06:31 出处:网络
Let\'s say I have a mastertable (table1) with a detailtable (table2). There can be multiple detail records for each masterrecord. Now I want a query that counts all detailrecords for each masterrecord

Let's say I have a mastertable (table1) with a detailtable (table2). There can be multiple detail records for each masterrecord. Now I want a query that counts all detailrecords for each masterrecord :

SELECT t1.id, count(t2.*)
FROM table1 as t1
LEFT JOIN table2 AS t2 ON t2.id=t1.id
GROUP BY t1.id

This gives me exactly the same number of records as table1 has.

But when I add a WHERE statement to only count the records that have a checkfield that's higher than 开发者_C百科0, I don't get all records in table1 anymore! The ones with no matching detailrecords are now left out completely. Why is this happening?

SELECT t1.id, count(t2.*)
FROM table1 as t1
LEFT JOIN table2 AS t2 ON t2.id=t1.id
WHERE t2.checkfield != 0
GROUP BY t1.id

(Maybe something else is wrong in my real query, since I tried to simplify it for this example, but I think I got it right)


The WHERE clause restricts the joined results which are being aggregated over, so while you're trying do an outer join, only those rows with t2.checkfield != 0 survive, but that excludes all the unmatched rows!

On the other hand, when you change WHERE to AND, you now have tab1 LEFT OUTER JOIN tab2 ON(tab1.id = tab2.t1_id AND some_condition) -- but this is still an outer join, i.e. records on the left which have no match on the right will be included.

0

精彩评论

暂无评论...
验证码 换一张
取 消