2012-11-04 31 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代码:

SELECT lr.lNo, lr.lDate, lr.lStart, lr.lStop 
FROM Leave lr 
Where lr.cStart = '2012-10-22' 

UNION ALL 

SELECT pa.pNo, ISNULL(tf.cDate, Convert(nvarchar(10),'2012-10-22',114)),tf.cIn, tf.cOut 
FROM fTime tf FULL OUTER join peopleAll pa On tf.cNo = pa.pNo AND 
tf.cDate = Convert(nvarchar(10),'2012-10-22',114) 

返回此输出:

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 

我试图改变FULL OUTER JOIN然后LEFT 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 JOIN有错过一些领域?

我需要这样的输出:

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无ldate lStart 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

如果您发送以下结果,它会太多吗?select cNo,cDate,cIn,cOut from fTime ft where not exist(从Leave l2中选择1,其中ft.cNo = l2.lNo)?? – 2012-11-05 19:59:00