Синтаксис Sql, чтобы всегда получить один - PullRequest
0 голосов
/ 26 мая 2011
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

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

Теперь, если ни один пользователь не прочитал его, тогда все в порядке, но если только один пользователь прочитал этот билет, то другие пользователи не имеют этого вызова в списке.

Я использую msSql и .net Entity Framework.

Ответы [ 2 ]

2 голосов
/ 26 мая 2011

вы хотите сделать следующее:

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

в основном, мы говорим здесь, если есть идентификатор пользователя, он должен быть 1. В противном случае первичный ключ записи является нулевым (из-заприсоединиться).Ответ Фоско также верен и намного меньше:)

2 голосов
/ 26 мая 2011

Вы уверены, что хотите ограничить таблицу 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

Это сделано для объединения при нескольких условиях ... Вы получите все вызовы, но только флаг IsRead из TicketRead, когда UserID # 1 прочитал его.

Я не уверен, что это именно то, что вы ищете, и я буду доступен для обновления позже, если нет.

Также, пожалуйста, рассмотрите возможность использования псевдонимов таблиц в будущем, думаю, вам понравится.

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