webForumDet fria alternativet

LEFT join probz.

2 svar · 381 visningar · startad av rincewind

rincewindMedlem sedan nov. 2003104 inlägg
#1

Hej,
jag har följande taballer..

// usertable
ID | username
______|__________
1 | user1
2 | user2
3 | user3

// gemstable
ID | won | lost | userID | onDate
__|__|__|__|___
1 | 3 | 1 | 1 | 2005-04-22
2 | 1 | 2 | 1 | 2001-11-02
3 | 6 | 4 | 2 | 2002-01-16
4 | 1 | 2 | 1 | 2006-01-12

Om jag gör en
SELECT usertable.username as userName, SUM(gemstable.won) AS wonSum, SUM(gemstable.lost) AS lostSum FROM usertable LEFT JOIN gemstable ON usertable.ID=gemstable.userID GROUP BY usertable.ID
Ger mig svaret:

userName | wonSum | lostSum
__________|___|__
user1 | 5 | 5
user2 | 6 | 4
user3 | NULL | NULL

Om jag gör en:
SELECT usertable.username as userName, SUM(gemstable.won) AS wonSum, SUM(gemstable.lost) AS lostSum FROM usertable LEFT JOIN gemstable ON usertable.ID=gemstable.userID WHERE gemstable.onDate<='2002-01-31' AND gemstable.onDate>='2002-01-01' GROUP BY usertable.ID
dvs lägger till WHERE biten får jag svaret:

userName | wonSum | lostSum
__________|___|__
user2 | 6 | 4

fast vad jag skulle vilja ha är:

userName | wonSum | lostSum
__________|___|__
user1 | NULL | NULL
user2 | 6 | 4
user3 | NULL | NULL

dvs att jag får ALLTID får allt från 'usertable' men summeringen av 'lost' och 'won' sker bara över det givna tids-spannet...
Någon som kan denna sql fråga?

Tacksam för svar.
-- R

@ndersMedlem sedan juni 200026 914 inlägg
#2

Flytta villkoren från WHERE till join-instruktionen. Dvs:

SELECT usertable.username as userName, SUM(gemstable.won) AS wonSum, SUM(gemstable.lost) AS lostSum 
FROM usertable 
LEFT JOIN gemstable ON usertable.ID=gemstable.userID [b]AND[/b] 
gemstable.onDate<='2002-01-31' AND gemstable.onDate>='2002-01-01' 
GROUP BY usertable.ID

Mvh

rincewindMedlem sedan nov. 2003104 inlägg
#3

hoho.. tack @nders.. rekord snabbt svar också.!

Genererad på 381 ms · cache AV · v20260730165559-full.f96bc7eb