Thanks, this is very helpful. I'm finally starting to understand Joins. But now I have a serious performance problem. Using INNER JOIN...

SELECT users.*, COUNT(history.user_id) as num_events
FROM users
INNER JOIN history ON (users.id = history.user_id)
GROUP BY users.user_name
ORDER BY id DESC

This is FAST, but incomplete—doesn't include users without events ("0" events in history table). 0.1 seconds to fetch 7 rows. Using LEFT JOIN


SELECT users.*, COUNT(history.user_id) as num_events
FROM users
INNER JOIN history ON (users.id = history.user_id)
GROUP BY users.user_name
ORDER BY id DESC

This is COMPLETE, but slow—includes users even with zero events, but takes 18 seconds to fetch 62 rows. (Incidentally, the history table is big, about 15000 records).

So... I would love to see the performance of the Inner Join, but with the all users fetched (even those with zero history events), that is what Left Join gives me.

Any more ideas?

...Rene

On 29-Jul-05, at 6:01 PM, Ed Reed wrote:

select USERS.Name, Count(WINS.user_id)

From USERS inner join WINS on WINS.user_id = USERS.id

Group By USERS.Name


René Fournier <[EMAIL PROTECTED]> 7/29/05 4:40 PM >>>

Let's say I have two tables:

USERS

id name
1 John
2 Mary
3 Sue
4 Paul
5 David


WINS
id user_id
1 2
2 4
3 3
4 5
5 1
6 4
7 4
8 2
9 3
10 1


How canin one SELECT statementfetch and display all the users,
along with the number of games they each one, e.g.:

User Games Won
----------------
John 2
Mary 2
Sue 2
Paul 3
David 1



Is this a job for Subselects?

...Rene
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]





--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to