Вы можете объединить все три таблицы:
SELECT t.TenantID, u.UnitName, tt.*
FROM Units u
INNER JOIN Tenants t ON U.UnitID = t.UnitID
LEFT JOIN TenantTransactions tt ON tt.tenantid = t.id
AND tt.TenantTransactionDate BETWEEN '2018-05-01' AND '2018-05-23'
WHERE u.Occupied = 1
AND u.PropertyID = 8
AND t.Prospect = 2
ORDER BY u.UnitName, tt.TenantTransactionDate
Имейте в виду, что первые два столбца (t.TenantID
, u.UnitName
) будут повторяться много раз: по одному разу для каждой строки в TenantTransactions
стол.Вам нужно будет сгруппировать их в своем приложении.Простая логика подойдет.
В любом случае, этот запрос намного быстрее, чем то, что вы делаете сейчас.
Кроме того, если у арендатора нет транзакций, значения в столбцах tt.*
будутвсе будет нулевым.Имейте это в виду, поскольку он использует left join
.Этот тип объединения необходим для обеспечения отображения всех арендаторов независимо от того, имеют ли они транзакции.