У нас есть 2 стола Бронирование, Ticket. Ticket.BookingId является внешним ключом к Booking.Id: Выберите записи с соответствующими записями определенного типа
Как написать SQL выбрать (совместимый с MS SQL Server) для отдельных заказов, который имеет только билеты типа 1 или 3 или 7?
Что-то как:
select Booking.Id
from Booking
join Ticket on Ticket.BookingId = Booking.Id
group by Booking.Id
having Ticket.Type IN (1,3,7)
К примеру, в этом случае:
конечный результат будет: 2,3.
Booking.Id = 1 не в конечном результате, так как в таблице Билет Билет (Id = 4, BookingId = 1, Тип = 8), так что это бронирование также содержит другой тип билета, чем 1 или 3 или 7
Решение в LINQ:
var result = (from b in Booking
join t in Ticket on Booing.Id equals Ticket.BooingId
group new {b,t} by b.Id).Where(group => group.Where(itemOfGroup=>itemOfGroup.Ticket.Type != 1 && itemOfGroup.Ticket.Type != 3 && itemOfGroup.Ticket.Type != 7).Count() == 0).Select(group => group.Key);
в случае 'BookingId: 1' имеют' Тип: 1, 3, 7, 8 . Нужно ли возвращать «Забыть: 1» в конечном результате или нет? Потому что вы упомянули только «1, 3, 7»! – Arulkumar
Нет. Это сущность моей проблемы. Мне нужно в конечном итоге только заказы, которые не содержат другой тип билета, чем 1,3,7. Если бронирование также содержит билет типа 8, это бронирование не может быть окончательным. –