2012-11-04 1 views
0

2 개의 테이블을 조인하지만 3 개의 테이블을 사용합니다. 나는 값을 복제 할 필요가 없다. 하지만 합류하려고하면 중복됩니다.중복되지 않도록 가입하려면 어떻게해야합니까?

peopleAll :

pNo pName 
------------- 
00001 Sang 
00002 Janta 
00003 Els 
00004 Est 
00005 Sam 
00006 John 
00007 Misan 
00008 Wila 
00009 light 
00010 Smith 
00011 Ritpo 

fTime :

cNo cDate      cIn      cOut 
----------------------------------------------------------------------------------- 
00001 2012-10-22 00:00:00.000 2012-10-22 07:59:00.000 2012-10-22 20:34:00.000 
00002 2012-10-22 00:00:00.000 2012-10-22 12:50:00.000 2012-10-22 19:50:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 12:01:00.000 2012-10-22 20:30:00.000 
00004 2012-10-22 00:00:00.000 2012-10-22 07:55:00.000 2012-10-22 20:30:00.000 
00005 2012-10-22 00:00:00.000 2012-10-22 07:27:00.000 2012-10-22 20:31:00.000 
00010 2012-10-22 00:00:00.000 2012-10-22 07:12:00.000 2012-10-22 20:22:00.000 

Leave :

lNo lDate      lStart      lStop 
----------------------------------------------------------------------------------- 
00002 2012-10-22 00:00:00.000 2012-10-22 08:00:00.000 2012-10-22 12:00:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 08:00:00.000 2012-10-22 12:00:00.000 
00011 2012-10-22 00:00:00.000 NULL      NULL 

이 SQL 코드 :

(210 개)

수익률이 출력 :

lNo lDate      lStart      lStop 
----------------------------------------------------------------------------------- 
00001 2012-10-22 00:00:00.000 2012-10-22 07:59:00.000 2012-10-22 20:34:00.000 
00002 2012-10-22 00:00:00.000 2012-10-22 08:00:00.000 2012-10-22 12:00:00.000 
00002 2012-10-22 00:00:00.000 2012-10-22 12:50:00.000 2012-10-22 19:50:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 08:00:00.000 2012-10-22 12:00:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 12:01:00.000 2012-10-22 20:30:00.000 
00004 2012-10-22 00:00:00.000 2012-10-22 07:55:00.000 2012-10-22 20:30:00.000 
00005 2012-10-22 00:00:00.000 2012-10-22 07:27:00.000 2012-10-22 20:31:00.000 
00006 2012-10-22 00:00:00.000 NULL      NULL 
00007 2012-10-22 00:00:00.000 NULL      NULL 
00008 2012-10-22 00:00:00.000 NULL      NULL 
00009 2012-10-22 00:00:00.000 NULL      NULL 
00010 2012-10-22 00:00:00.000 2012-10-22 07:12:00.000 2012-10-22 20:22:00.000 
00011 2012-10-22 00:00:00.000 NULL      NULL 

내가 다음 LEFT OUTER JOINFULL OUTER JOIN을 변경하려고 내가 출력을 얻을 :

lNo lDate      lStart      lStop 
----------------------------------------------------------------------------------- 
00002 2012-10-22 00:00:00.000 2012-10-22 08:00:00.000 2012-10-22 12:00:00.000 
00002 2012-10-22 00:00:00.000 2012-10-22 12:50:00.000 2012-10-22 19:50:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 08:00:00.000 2012-10-22 12:00:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 12:01:00.000 2012-10-22 20:30:00.000 
00004 2012-10-22 00:00:00.000 2012-10-22 07:55:00.000 2012-10-22 20:30:00.000 
00007 2012-10-22 00:00:00.000 NULL      NULL 
00008 2012-10-22 00:00:00.000 NULL      NULL 
00010 2012-10-22 00:00:00.000 2012-10-22 07:12:00.000 2012-10-22 20:22:00.000 
00011 2012-10-22 00:00:00.000 NULL      NULL 

LEFT OUTER 일부 필드를 그리워이 가입?

나는이 출력이 필요합니다

lNo lDate      lStart      lStop 
----------------------------------------------------------------------------------- 
00001 2012-10-22 00:00:00.000 2012-10-22 07:59:00.000 2012-10-22 20:34:00.000 
00002 2012-10-22 00:00:00.000 2012-10-22 12:50:00.000 2012-10-22 19:50:00.000 
00003 2012-10-22 00:00:00.000 2012-10-22 12:01:00.000 2012-10-22 20:30:00.000 
00004 2012-10-22 00:00:00.000 2012-10-22 07:55:00.000 2012-10-22 20:30:00.000 
00005 2012-10-22 00:00:00.000 2012-10-22 07:27:00.000 2012-10-22 20:31:00.000 
00006 2012-10-22 00:00:00.000 NULL      NULL 
00007 2012-10-22 00:00:00.000 NULL      NULL 
00008 2012-10-22 00:00:00.000 NULL      NULL 
00009 2012-10-22 00:00:00.000 NULL      NULL 
00010 2012-10-22 00:00:00.000 2012-10-22 07:12:00.000 2012-10-22 20:22:00.000 
00011 2012-10-22 00:00:00.000 NULL      NULL 

(00002,00003 from fTime) 

저를 도와주세요. 시간 내 주셔서 감사합니다. 오류가 당신이 넣어 나에게 밖으로 보낼 수 있습니다받을 경우

답변

1
Select p.pNo 
,Coalesce(l.cDate,t.lDate,'2012-10-22') as ldate 
,Coalesce(l.lStart,t.cIn) as lstart 
,Coalesce(l.lStop,t.cOut ) as lstop 
from peopleall p 
left join leave l on l.lNo=p.Pno and l.ldate='2012-10-22' 
left join fTime t on t.tNo=p.Pno and t.cDate='2012-10-22' 
+0

감사합니다. 그것의 작품. : D – nettoon493

0

Select p.pNo , 
Coalesce(l.lDate , ftemp.cDate , NULL) as lDate , 
Coalesce(l.lStart,ftemp.cIn , NULL) as lStart , 
Coalesce(l.lStop , ftemp.cOut, NULL) as lStop 
from peopleAll p 
left join Leave l on (p.pNo = l.lNo) 
left join 
    (select cNo, cDate ,cIn, cOut 
    from fTime ft where not exists (select 1 from Leave l2 
             where ft.cNo = l2.lNo)) 
    ftemp 
on (ftemp.cNo = p.pNo) 

을 시도 :)?

+0

시도해 본 후 l 날짜 l 시작 lStop 00001 2012-10-21 00 : 00 : 00.000 2012-10-21 07 : 00 : 00.000 2012-10-21 19 : 00 : 00.000 00001 2012- 10-23 00 : 00 : 00.000 2012-10-23 08 : 00 : 00.000 2012-10-23 20 : 00 : 00.000 00002 2012-10-22 00 : 00 : 00.000 2012-10-22 12 : 50 : 00.000 2012-10-22 19 : 50 : 00.000 00003 2012-10-22 00 : 00 : 00.000 2012-10-22 08 : 00 : 00.000 2012-10-22 12 : 00 : 00.000 00003 2012-10-22 00 00 : 00.000 2012-10-22 12 : 01 : 00.000 2012-10-22 20 : 30 : 00.000 ..... ..... ..... 중복 값입니다. – nettoon493

+1

결과를 보내면 너무 많은가? : fTime ft에서 cNo, cDate, cIn, cOut을 선택하십시오 (ft.cNo = l2.lNo에서 Leave l2에서 1을 선택하십시오) ?? –