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 18,794 of 19,505    |
|    migurus to All    |
|    join with one parent record only    |
|    03 Dec 12 15:42:39    |
   
   From: migurus@yahoo.com   
      
   There is parent-child table situation and I am interested in getting only   
   cases when only one parent record exists, the matching criteria are in both   
   tables. There are one or two child records per each parent.   
      
   Running on SQL 2008, here is illustration, I omit key etc for brevity:   
      
   declare @MAIN_NAME varchar(32) = 'B%';   
   declare @ATTR int = 124;   
      
   declare @MAIN_RECORD table (   
    MAIN_NAME varchar(32) not null    
   , ID int not null   
   );   
      
   declare @SUB_RECORD table (   
    MAIN_ID int not null   
   , LOW_VAL int not null   
   , UP_VAL int not null   
      
   );   
      
   insert into @MAIN_RECORD values   
    ('BETA-0' ,1)   
   ,('BETA-1' ,2)   
   ,('BETA-2' ,3);   
      
   insert into @SUB_RECORD values   
   -- BETA-0   
    ( 1, 100, 200 )   
   ,( 1, 101, 201 )   
   -- BETA-1   
   ,( 2, 1000, 1240 )   
   ,( 2, 1001, 1251 )   
   ,( 2, 1400, 1500 )   
   -- BETA-2   
   ,( 3, 1001, 1889 )   
   ,( 3, 1002, 1458 )   
      
      
      
   select M.MAIN_NAME   
   , S.LOW_VAL   
   , S.UP_VAL   
      
   from @MAIN_RECORD M, @SUB_RECORD S   
   where M.ID = S.MAIN_ID   
   and M.MAIN_NAME like @MAIN_NAME   
   and @ATTR between S.LOW_VAL and S.UP_VAL;   
      
   result is   
   MAIN_NAME LOW_VAL UP_VAL   
   BETA-0 100 200   
   BETA-0 101 201   
   and this is good result, only one parent record found.   
      
   If I say @ATTR = 1424   
   result is   
   MAIN_NAME LOW_VAL UP_VAL   
   BETA-1 1400 1500   
   BETA-2 1001 1889   
   BETA-2 1002 1458   
   and I'd like NOT to output anything in this case, as there are two parent   
   records matching.   
      
   I can deal with this on the application side, where I would programmatically   
   count how many distinct MAIN_NAME came back and discard results when it is   
   more than one.   
      
   But I suspect there are ways to do it on the server side. Any thoughts 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