2013-04-20 26 views
8

I (Ben 2005 olduğuna inanıyoruz) SQL Server kullanıyorum olduğundan daha az satırlarda sonuçlarını katılmak.SQL Server: sol sol masanın

I2 sütun ve 439 satır (her satır benzersiz) sahiptir TableA sahiptir.

+----------+ 
|ID | Name | 
+----------+ 

Ben 35 sütun ve bin satır yüzlerce (her satır da eşsizdir) sahiptir TableB var. TableB yılında

+------------------------------------------------------------------------------+ 
|Date | ID | Name | Blah1 | Blah2 | ... | Hour1 | Hour2 | Hour3 | ... | Hour24 | 
+------------------------------------------------------------------------------+ 

Her satır saatlik gözlem ve diğer bazı ev tutarak bilgileri yer alır. Şimdi test amaçlı olarak sadece bugünün tarihi ile ilgileniyorum, yani 4/19/2013.

İstiyorsam: Her gün saatlik gözlem verisi olduğu 10526 farklı yer vardır olarak doğrudur 10526, elde

Select count(*) 
from TableB 
where Date = '4/19/2013 12:00:00 AM' 

.

ben 439 satır vardır bir sonuç GEREKEN tableA ve TABLEB on a.id = b.id, JOIN SOL istiyorum.

Ne yazık ki, sonuç 246 sıralıdır. Bu nasıl olabilir? Bir LEFT JOIN bakılmaksızın TableB bir maç oldu bakılmaksızın TableA tüm satırları döndürmek için varsayalım değil midir? * DÜZENLEME

*

kullandığım komple sorgulama:

select * 
from TableA as a 
left join TableB as b on a.id = b.id 
where RealDate = '4/20/2013 12:00:00 AM' 
+3

kullandığınız tüm sorguyu gösterebilir – PSR

+0

@PSR - Kullanılan orijinal sorguyu dahil etmek için orijinal gönderimi düzenledim. – codingknob

+0

@LoztInSpace değerli yorumu yeniden yorumlama: JOIN'den önce seçim tablolarına kısıtlamalar (WHERE kullanarak) ekleyin. Aksi takdirde, bu kısıtlamalar birleştirmelerin sonuç çıktısına etki eder (ve satırları orijinal tablolardan daha da azına indirebilir). –

cevap

17

bu deneyin:

select * from TableA as a 
left join (SELECT * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b 
on a.id = b.id 

Ya da bu:

select * from TableA as a 
left join TableB as b on (a.id = b.id AND RealDate = '4/20/2013 12:00:00 AM') 
+0

Bu hile yaptı. Teşekkür ederim. Ben SQL için bir acemi değilim, bu nedenle bu durumda bu maddenin yerleştirilmesinin böyle büyük bir fark yaratacağını bilmiyorum. Orijinal sorgumun gerçekte ne yaptığını merak ediyorum. Eğer mantıklı olmasaydı 246 satırın sonucu neydi? – codingknob

+2

, sorgunuz ilk önce sol birleştirme yaptı, daha sonra sonuç, nerede yan tümce ile filtreleyecek. Umarım mantıklıdır. Eğer olmazsa daha fazla detay verebilirim. – faisal

+0

, orijinal sorgumun 'SADECE 'bir' SOL 'katılımının felsefesini takip etmeyen a.ID = b.ID dizisinin' SADECE' döndüğüydi. Bu oldukça garip. Ama bunu kabul edip çözümünüz doğru olanı olarak hareket edip sorunumu çözüyorum. Teşekkür ederim. Bunu takdir ediyorum. – codingknob