2014-01-31 4 views
0

Я получаю неверный счет, когда я использую несколько «совпадений». Он должен показывать только 3, как итог, но он возвращает 134 для общей суммы. Каков правильный способ использования COUNT с несколькими «Соединениями»?Неверный подсчет с несколькими объединениями

SELECT r.Field1 
     , Total = COUNT(r.Field1) 
FROM Location1.dbo.Table1 r (NOLOCK) 
     JOIN Location2.dbo.Table2 i (NOLOCK) ON r.Field1 = i.Field1 
     JOIN Location3.dbo.Table3 rt (NOLOCK) ON rt.Field1 = i.Field1 
                AND rt.Field2 = r.Field2 
WHERE r.Field3 = '40' 
     AND r.Field4 = 'H' 
     AND r.Field1 = '516' 
     AND CONVERT(CHAR(10), r.TIMESTAMP, 101) = CONVERT(CHAR(10), GETDATE(), 101) 
GROUP BY r.Field1 
+0

Что заставляет вас думать, что 3 правильно, а 134 isn ' т? – MikeSmithDev

+0

Потому что, если я выбрал только r.Field1, COUNT (r.Field) из первой таблицы ** без **, общее число равно 3. Я также подтвердил, что это должно быть 3. – user2531854

+0

Да, хорошо с объединениями, вы получаете 134 результата. Используйте 'SELECT *', удалите 'GROUP BY' и посмотрите результаты. – MikeSmithDev

ответ

2

Вот как работает соединение. Вы получаете общее количество результатов в результате соединений. Поэтому, даже если исходная таблица имеет только одну строку, соответствующую вашим критериям, COUNT из JOIN может иметь сотни результатов из-за отношений «один ко многим». Вы можете понять, почему, изменив ваш запрос:

SELECT * 
FROM Location1.dbo.Table1 r (NOLOCK) 
     JOIN Location2.dbo.Table2 i (NOLOCK) ON r.Field1 = i.Field1 
     JOIN Location3.dbo.Table3 rt (NOLOCK) ON rt.Field1 = i.Field1 
      AND rt.Field2 = r.Field2 
WHERE r.Field3 = '40' 
     AND r.Field4 = 'H' 
     AND r.Field1 = '516' 
     AND CONVERT(CHAR(10), r.TIMESTAMP, 101) = CONVERT(CHAR(10), GETDATE(), 101) 

Это вернет все строки со всех столов, и вы увидите 134 строки. Если вас не интересует итог, то не делайте этого соединения, так как вы говорите, что запрос без объединений дает ожидаемый результат 3.

+0

Это имеет смысл. Я не принимал во внимание отношения друг к другу. Я планировал добавлять другие поля позже из этих объединений. Спасибо за вашу помощь! – user2531854

Смежные вопросы