Но необходимо добавить leftJoin, в ON условии которого имеется подзапрос вида:
LEFT JOIN [dbo].[HotelQuotas] as hqs ON hqs.Id =
(
SELECT TOP 1 Id
FROM [dbo].[HotelQuotas]
WHERE BuildingId = blds.Id
AND RoomCategoryId = rmcts.Id
AND RoomTypeId = rmtps.Id
AND TourOperatorId = prices.TourOperatorId
AND (TypeVisit = 0 AND NOT ((DATEADD(DD, hs.Nights, prices.Date) < Date) OR (DATEADD(DD, Duration, Date) < prices.Date))
OR TypeVisit = 1
AND prices.Date >= Date
AND prices.Date <= DATEADD(DD, Duration, Date)
)
ORDER BY Id DESC, FreeAccess ASC
все связи, blds, rmcts, rmtps, prices, hs определены в innerJoin-ах выше.
с какой стороны лучше подлезть… есть варианты? что-то не могу осилить
Могу сказать сразу что это будет тормозить если у тебя вырастет база. На сколько я знаю MySql плохо работает с подзапросами. В таких случая я обычно создаю отдельную таблицу или лучше view и туда кеширую данные. Если нельзя сделать кэш, например в тоем случае, лучше оформить это в коде. Я пробовал эксперементировать. Странно, но работает очень медленно, даже со всеми index.
спасибо большое, что привели пример из опыта… так и есть… таблица в 132к записей жутко тормозит… а вырастет она очень быстро… буду искать другое решение ) хотя на MariaDb работает заметно быстрее… Mysql похоже и вправду с подзапросами не дружит