[thelist] SQL multiple Joins?
Jason Handby
jason.handby at corestar.co.uk
Thu Nov 15 08:37:47 CST 2007
Hi Tris,
> Is it possible to have multiple joins..
The short answer is "yes".
However, the slightly longer answer is, as with anything, that you will
only get the results you expect if you use them right :-)
> Ont eh query below. it failes.. Buuuut, if I limit it to one join, it
> works great..
> My database logs transactions and I'm trying to produce a report that
> shows each transaction total, within a certain period.. (Oct and sept
> so far..)
>
> but it's cfalling over..
>
> SELECT
> SUM(activitiesSep.points) as sepPoints
> ,SUM(activitiesOct.points) as octPoints
> ,users.ID
> ,users.Username
> ,users.Password
> ,users.Name
> ,users.Company
> ,users.Address1
> ,users.Address2
> ,users.Address3
> ,users.Address4
> ,users.Address5
> ,users.Postcode
> ,users.Email
> ,users.CustomerType
> ,users.Active
> ,users.LogIns
> ,users.GAURef
> ,users.JRRef
> ,users.GAUMember
> ,users.GAUContact
> ,users.RegForm
> ,users.Created
> ,users.Updated
>
> FROM `users`
>
> RIGHT JOIN `activities` as `activitiesSep` on
> activitiesSep.UserID = users.ID
> WHERE activitiesSep.`Timestamp` >= '1188604800' AND
> activitiesSep.`Timestamp` <= '1191196799'
>
> RIGHT JOIN `activities` as `activitiesOct` on
> activitiesOct.UserID = users.ID
> WHERE activitiesOct.`Timestamp` >= '1191196800' AND
> activitiesOct.`Timestamp` <= '1193875199'
>
> GROUP BY users.ID
OK, so one pretty nice way to do this would be to use subqueries,
perhaps like this:
SELECT
(SELECT SUM(points) FROM activities
WHERE activities.`Timestamp` >= '1188604800'
AND activities.`Timestamp` <= '1191196799'
AND activities.UserID = users.ID
) AS sepPoints,
(SELECT SUM(points) FROM activities
WHERE activities.`Timestamp` >= '1191196800'
AND activities.`Timestamp` <= '1193875199'
AND activities.UserID = users.ID
) AS octPoints,
,users.ID
,users.Username
,users.Password
,users.Name
,users.Company
,users.Address1
,users.Address2
,users.Address3
,users.Address4
,users.Address5
,users.Postcode
,users.Email
,users.CustomerType
,users.Active
,users.LogIns
,users.GAURef
,users.JRRef
,users.GAUMember
,users.GAUContact
,users.RegForm
,users.Created
,users.Updated
I've just tested something like this in MS-SQL and it works fine, so
hopefully it should give you something to go on.
Jason
More information about the thelist
mailing list