2011-05-25 29 views
0
SELECT dbo.Calls.Description, dbo.TicketRead.IsRead, dbo.TicketRead.UserID 
FROM dbo.Calls 
LEFT OUTER JOIN dbo.TicketRead ON dbo.Calls.CallID = dbo.TicketRead.TicketID 
WHERE dbo.TicketRead.UserID = 1 or is null 

我想要得到所有調用的列表,但也是一個值,指示用戶是否已經讀取了調用。所以我在用戶打開票時在特殊表中添加了新記錄。SQL語法總是得到一個

現在如果沒有用戶看了那麼這是確定的,但如果只是一個用戶已閱讀本票,那麼其他用戶沒有在列表中此調用..

我使用的是MSSQL和.net實體框架。

回答

2

是否確定要將TicketRead表限制爲UserID#1?

SELECT c.Description, r.IsRead, r.UserID 
FROM dbo.Calls c 
LEFT JOIN dbo.TicketRead r 
    ON c.CallID = r.TicketID 
    AND r.UserID = 1 

這樣做是加盟取決於多個條件。你會得到所有的呼叫,但是當用戶ID#1讀取它只能從TicketRead的IsRead標誌。

我不相信這實際上是你要找的東西,如果不是,我會在稍後更新。

另外請考慮將來使用表別名,我想你會喜歡它。

+0

感謝您的支持!但我如何從實體框架中做到這一點? – Ezi 2011-05-25 20:32:55

2

你是想做到以下幾點:

SELECT dbo.Calls.Description, dbo.TicketRead.IsRead, dbo.TicketRead.UserID 
FROM dbo.Calls 
LEFT OUTER JOIN dbo.TicketRead ON dbo.Calls.CallID = dbo.TicketRead.TicketID 
WHERE 
dbo.TicketRead.UserID = 1 
or dbo.TicketRead.CallID IS NULL 

基本上,我們在這裏說,如果有一個用戶ID,它必須是1。否則,記錄主鍵是零(因爲加入)。 Fosco的答案也是對的,而且要小得多:)