Forums before death by AOL, social media and spammers... "We can't have nice things"
|    comp.databases.ms-sqlserver    |    Notorious Rube Goldberg contraption    |    19,505 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 19,177 of 19,505    |
|    bradbury9 to All    |
|    Re: left join not quite working    |
|    27 Feb 15 00:16:48    |
      From: ray.bradbury9@gmail.com              That is right. Combining a LEFT JOIN with a WHERE clause using left joined       table defeats the LEFT JOIN purpose because you implicity make the join to       behave like an INNER JOIN.              That is the reason that adding the restriction to the ON is an easy way.                     > Solved - I should have check for the date within ON clause, and not in the       WHERE       > correct version looks like this :       >       > select ...       > left join @SCHEDULED S on E.EMPL_ID=S.EMPL_ID       > and S.WORK_DATE = '20150107';       >       >       > On Thursday, February 26, 2015 at 3:51:12 PM UTC-8, M.G. wrote:       > > I need to show list of employees along with their scheduled work hours for       a given date. If employee was not scheduled to work, then the hours should be       empty on his/her line.       > >       > > Here is my setup (SQL 2008)       > > declare @EMPLOYEES table (       > > EMPL_ID int NOT NULL       > > , EMPL_NAME varchar(64)       > > )       > > insert into @EMPLOYEES(EMPL_ID,EMPL_NAME) values       > > ( 100, 'JOHN'),       > > ( 200, 'BOB'),       > > ( 300, 'MARY');       > >       > >       > > declare @SCHEDULED table (       > > EMPL_ID int NOT NULL       > > , WORK_DATE date NOT NULL       > > , WORK_HOURS int NOT NULL       > > )       > > insert into @SCHEDULED(EMPL_ID, WORK_DATE, WORK_HOURS) values       > > ( 100, '20150106', 8),       > > ( 100, '20150107', 8),       > > ( 100, '20150108', 8),       > > ( 200, '20150107', 6);       > >       > > So, I expect to get three records in my report regardless of the day       specified.       > >       > >       > >       > > This is my SQL statement:       > >       > > select E.EMPL_ID, E.EMPL_NAME, S.WORK_DATE, S.WORK_HOURS       > > from        > > @EMPLOYEES E       > > left join @SCHEDULED S on E.EMPL_ID=S.EMPL_ID       > >       > > where S.WORK_DATE = '20150107' or S.EMPL_ID IS NULL;       > >       > > It results in :       > >       > > EMPL_ID EMPL_NAME WORK_DATE WORK_HOURS       > > ======= ======= ========== =======       > > 100 JOHN 2015-01-07 8       > > 200 BOB 2015-01-07 6       > > 300 MARY NULL NULL       > >       > > Which is correct.       > >       > > If I use 20150206, my result is:       > >       > > 100 JOHN 2015-01-06 8       > > 300 MARY NULL NULL       > >       > > So, I am missing record for BOB, as I would expect to se BOB with NULLS in       the report       > >       > > If I use date of 20150131 I expect to get three lines with all hours being       NULLS, but my result is only one record:       > >       > > 300 MARY NULL NULL       > >       > > Please help me with this situation, any ideas would be appreciated.              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca