SQL Server: левое соединение приводит к меньшему количеству строк, чем в левой таблице


Я использую SQL Server (я думаю, что это 2005).

У меня есть TableA , который имеет 2 столбца и 439 строк (каждая строка уникальна).

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

У меня есть TableB, который имеет 35 столбцов и многие сотни тысяч строк (каждая строка также уникальна).

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

Каждая строка в TableB имеет ежечасные наблюдения и некоторую другую информацию о хранении дома. Теперь для целей тестирования меня интересует только сегодняшняя дата, т. е. 4/19/2013.

Если я это сделаю:

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

Я получаю 10526, то есть правильно, поскольку есть 10526 различных мест, для которых есть ежечасные данные наблюдений каждый день.

Я хочу слева соединить TableA и TableB on a.id = b.id, что должно привести к результату, который имеет 439 строк.

К сожалению, результат имеет 246 строк. Как такое может быть? Разве a LEFT JOIN не должен возвращать все строки в TableA независимо от того, было ли совпадение в TableB?

*править*

Полный запрос, который я использовал, был:

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

1 ответ:

Попробуйте это:

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 

Или вот это:

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