У меня есть 3 таблицы.
support_works = содержать серийный номер
kickscooters = contian serial_number, kickscooter_id (в качестве основного идентификатора и именованного идентификатора)
rents = содержать kickscooter_id.
Я пытаюсь получить serial_number support_works, который удовлетворяет условиям, а затем сопоставить его с serial_number kickscooter. Затем получите его kickscooter_id, чтобы получить все арендные ставки, которые соответствуют kickscooter_id, полученному из него.
В настоящее время:
select k.id
from support_works sw
join kickscooters k
on k.serial_number = sw.serial_number
where
sw.work_type = 'deploy' and
(sw.updated_at between '2019-11-01 02:00:00' and '2019-11-01 10:00:00') and
k.id in (select kcu.kickscooter_id
from kickscooter_control_units kcu
where kcu.particle_product_id in (9358, 9383)));
это отлично работает при получении kickscooter_id из таблицы kickscooter. Но сейчас я использую это как подзапрос, чтобы получить все данные таблицы аренды, где rents.kickscooter_id находится в этом подзапросе:
select *
from rents r
where r.kickscooter_id
in (select k.id
from support_works sw
join kickscooters k
on k.serial_number = sw.serial_number
where
sw.work_type = 'deploy' and
(sw.updated_at between '2019-11-01 02:00:00' and '2019-11-01 10:00:00') and
k.id in (select kcu.kickscooter_id
from kickscooter_control_units kcu
where kcu.particle_product_id in (9358, 9383)));
Это занимает слишком много времени, и я хочу использовать несколько соединений, чтобы ускорить процесс. Как я могу это сделать?
Я использовал CTE, однако я прочитал, что он занимает память при создании / удалении временной таблицы, поэтому попытался избежать этого.