mysql - 使用查询的别名与另一个表 MySQL 连接
问题描述
我有 3 张桌子。
support_works = 包含
序列号 kickscooters = contian 序列号,kickscooter_id(作为主要 id 和命名 id)
租金 = 包含 kickscooter_id。
我正在尝试获取满足条件的 support_works 的序列号,然后将其与 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 表中获取 kickscooter_id。但是我现在使用它作为子查询来获取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,但是我读到它在创建/删除临时表时会占用内存,因此试图避免它。
解决方案
您可以加入kickscooter_control_units
您subquery
的 useexists
关键字而不是 IN。
select *
from rents r
where
exists
(select 1
from support_works sw
join kickscooters k on k.serial_number = sw.serial_number
join kickscooter_control_units kcu on kcu.kickscooter_id = k.id and kcu.particle_product_id in (9358, 9383)
where
sw.work_type = 'deploy' and
(sw.updated_at between '2019-11-01 02:00:00' and '2019-11-01 10:00:00'))
似乎根据您正在过滤的场景ID
。exists
仅当您想检查某些是否subquery
包含值时才适用。
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
join kickscooter_control_units kcu on kcu.kickscooter_id = k.id and kcu.particle_product_id in (9358, 9383)
where
sw.work_type = 'deploy' and
(sw.updated_at between '2019-11-01 02:00:00' and '2019-11-01 10:00:00'))
推荐阅读
- javascript - 如何在高度变化时改变兄弟高度
- reactjs - 在 FirebaseAuth 之后 React 渲染不更新
- java - 获取所有短信对话一个特定的号码,
- rest - 如何判断长时间运行的 API 调用是否仍在运行或意外失败
- python - How to draw a continuous line in Pygame?
- android - 如何在确定的水平进度条中设置百分比
- c# - VSTS-TFS trigger build limit policy
- android - 为什么我不能让 adb shell top 工作?
- sql-server - INSERT INTO,但保留空白列?
- java - REST 消费者控制台应用程序的 Spring 初始化程序依赖项