Sql Server Null Table Join
I have two tables one of it is LEAGUE, another is MATCH , in MATCH table there is a column as refLeague now I want to get total matches of week For example Id TotalMatches -- ---
Solution 1:
Move the right table filters to ON
condition
Non matching records will have NULL
values in m.MatchDate
which will be filtered by the condition in Where
clause . Implicitly it will be converted to INNER JOIN
. So the condition should be moved to ON
clause which tells what are the records to be joined with LEAGUE
instead of filtering the result
SELECT l.id,
Count(m.id) AS TotalMatches
FROM league l
LEFTJOINmatch m
ON l.id = m.refleauge
AND m.matchdate >= Dateadd(dd, Datediff(dd, 1, Getdate()) /7*7+1, 0)
AND m.matchdate < Dateadd(dd, Datediff(dd, -6, Getdate()) /7*7+1, 0)
WHERE l.refsport =1GROUPBY l.id
Solution 2:
The where is breaking the left join
SELECT l.Id, COUNT(m.Id) as TotalMatches
FROM LEAGUE l
LEFTJOINMATCH m
ON l.Id = m.refLeauge
and m.MatchDate >= dateadd(dd, datediff(dd, 1, getdate()) /7*7+1,0)
AND m.MatchDate < dateadd(dd, datediff(dd,-6, getdate()) /7*7+1,0)
where l.refSport=1GROUPBY l.Id
/ 7 * 7 = 1
When I started this answer the other answer was not yet posted
Post a Comment for "Sql Server Null Table Join"