2012-03-28 288 views
0

我使用完全相同的查詢從兩個表中獲取數據。當我不使用c.IsReceived = 0部件時,它將返回日期,但在使用時不會返回任何內容。在RepDailyCollection中有的IsReceived = 0。你認爲我做錯了什麼?這是在2005年的SQL Server。 thnak你!sql查詢返回null

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 

回答

0

這裏有很多錯誤。

在第一個查詢您有:

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

你是對的Chris。我搞砸了查詢。 :-(我明白可能出錯了,謝謝你的時間! – Ram 2012-03-28 19:32:58

0

如果你有 「LEFT JOIN ... ON ... = RepDailyInfo.RepDailyInfoID」,應該說實際上是 「LEFT JOIN ... ON ... = RepDailyInfo.RepDailyCollectionID」?

+0

請參閱編輯部分,它工作正常,並給我日期,但不是我問的真正的問題.. – Ram 2012-03-28 19:12:45

+0

我很高興你有你的答案。我只知道當我與我加入的字段不匹配時,我往往不會得到任何結果。 – Brian 2012-03-29 16:25:29

0

難道它是一個varchar/char字段?

c.IsReceived = '0' 
+0

不,這是一個布爾值:-( – Ram 2012-03-28 18:53:24

0

有可能在RepDailyCollection記錄與IsReceived = 0RepID = 205,但如果沒有在RepDailyInfo任何記錄與205 REPID則沒有記錄會因爲你的where子句中返回。

根據您的陳述與RepDailyCollection

有行IsReceived = 0 REPID = 205

這聽起來像你的where子句應該是:

c.RepID = 205 and c.IsReceived = 0 

代替的

RepDailyInfo.RepID = 205 and c.IsReceived = 0 
+0

謝謝,但我在RepDailyInfo行中有RepID = 205 – Ram 2012-03-28 18:54:46

+0

RepDailyCollection中沒有列RepID我雙重檢查:-(問題是因爲連接? – Ram 2012-03-28 19:05:35

+0

請看這個問題的編輯部分?雖然我可以使用編輯的部分得到結果,但我想知道我問的最初問題有什麼問題..感謝您的時間@abe – Ram 2012-03-28 19:14:42

0

爲您的測試..你可以做下面的查詢..

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

IsReceived是真或假。 :-( – Ram 2012-03-28 19:06:36

+0

你可以看看Pratik的問題的編輯部分嗎?雖然我可以得到結果,但我想知道我問的最初問題有什麼問題。 – Ram 2012-03-28 19:13:45

+0

我曾經發布過這樣的看法,認爲你只是要求sql。 請告訴我爲什麼你要比較一個布爾類型的值爲0>? 它是在SQL服務器..> 在oracle中,你可以直接用'true'或'false'來檢查布爾值 – 2012-03-28 20:21:49