SQL запрос возвращает ноль - PullRequest
0 голосов
/ 28 марта 2012

Я использовал один и тот же запрос для получения данных из двух таблиц.когда я не использую часть c.IsReceived = 0, она возвращает даты, но ничего не возвращает при использовании.В RepDailyCollection есть строки с IsReceived = 0 для RepID = 205.Что ты думаешь я делаю не так?Это в 2005 году SQL Server.спасибо !!

Select 
  distinct RepDailyInfo.Date 
from 
  RepDailyInfo 
left outer join 
  RepDailyCollection c 
on 
  c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID
where 
  RepDailyInfo.RepID = 205 and c.IsReceived = 0

Редактировать:

Когда я использую другой сохраненный процесс, подобный этому, работает отлично.

Select i.Date
--i.RepDailyInfoID, i.RepID, i.TypeofDayID, i.CommuniTeeID, sum(cast(c.AmountSold as    numeric(10,2))) as AmountSold, 
--  sum(cast (c.AmountCollected as numeric(10,2))) as AmountCollected, c.NewCompanyName,c.PaymentMethod, 
--  c.TypeofCreditCard, c.CheckNumber, c.Invoice, c.Spots, TypeofDay.TypeofDay, CommuniTee.City, CommuniTee.State, 
--  CommuniTee.year, SalesRep_Info.FirstName, SalesRep_Info.LastName
from RepDailyInfo i
left outer join RepDailyCollection c on i.RepDailyInfoID = c.RepDailyInfoID 
left outer join TypeOfDay on TypeOfDay.TypeofDayID = i.TypeofDayID
left outer join SalesRep_Info on SalesRep_Info.RepID = i.RepID
left outer join CommuniTee on CommuniTee.CommuniTeeID = i.CommuniTeeID
 where i.RepID = 205 and c.IsReceived = 0 
 group by i.RepDailyInfoID, i.Date, i.TypeofDayID, i.CommuniTeeID, SalesRep_Info.FirstName, TypeofDay.TypeofDay, 
CommuniTee.City, CommuniTee.State, CommuniTee.year, SalesRep_Info.FirstName, 
SalesRep_Info.LastName, i.RepID, c.NewCompanyName, c.PaymentMethod, c.TypeofCreditCard, c.CheckNumber, c.Invoice, c.Spots
order by SalesRep_Info.FirstName desc

Ответы [ 5 ]

0 голосов
/ 28 марта 2012

Здесь много чего не так.

В первом запросе у вас есть:

Select 
  distinct RepDailyInfo.Date 
from 
  RepDailyInfo 
left outer join 
  RepDailyCollection c 
on 
  c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID
where 
  RepDailyInfo.RepID = 205 and c.IsReceived = 0

Несмотря на то, что вы говорите «левое внешнее соединение», из-за предложения where вы также можете сказать «внутреннее соединение».

Несмотря на это, этот запрос не соответствует второму. Во втором запросе вы присоединяете RepDailyCollection к RepDailyInfo RepDailyInfoID . В первом запросе вы объединяете совершенно разные столбцы.

0 голосов
/ 28 марта 2012

для вашего тестирования .. вы можете сделать следующий запрос ..

Select distinct c.IsReceived from RepDailyInfo 
left outer join RepDailyCollection c on c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID
where RepDailyInfo.RepID = 205 and c.IsReceived = 0

если вы видите 0, тогда этот столбец должен иметь тип данных varchar2 ..

затем используйте следующий запрос \

Select distinct  RepDailyInfo.Date from RepDailyInfo 
left outer join RepDailyCollection c on c.RepDailyCollectionID = RepDailyInfo.RepDailyInfoID
where RepDailyInfo.RepID = 205 and c.IsReceived = '0'
0 голосов
/ 28 марта 2012

Может ли это быть поле varchar / char?

c.IsReceived = '0' 
0 голосов
/ 28 марта 2012

Могут быть записи в RepDailyCollection с IsReceived = 0 и RepID = 205, но если в RepDailyInfo нет записей с повторением 205, то никакие записи не будут возвращены из-за вашего условия where.

На основе вашего утверждения

В RepDailyCollection есть строки с IsReceived = 0 для RepID = 205

Похоже, что ваше предложение where должно быть:

c.RepID = 205 and c.IsReceived = 0

вместо

RepDailyInfo.RepID = 205 and c.IsReceived = 0
0 голосов
/ 28 марта 2012

Если у вас есть "LEFT JOIN ... ON ... = RepDailyInfo.RepDailyInfoID", должно ли это быть "LEFT JOIN ... ON ... = RepDailyInfo.RepDailyCollectionID"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...