我需要创建一个视图,该视图将过滤在辅助表中仅在1行中设置的日期范围:
aux_date_table
:
start_date end_date
------------------------
08/01/18 08/11/18
main_table
date subject
--------------------------
01/08/18 inoninoininoi
01/08/18 inoninoininoi
01/08/18 inoninoininoi
02/08/18 inoninoininoi
02/08/18 inoninoininoi
02/08/18 inoninoininoi
03/08/18 inoninoininoi
03/08/18 inoninoininoi
03/08/18 inoninoininoi
04/08/18 inoninoininoi
.
.
.
第一个选项是:
select main_table.*
from main_table, aux_date_table
where main_table.date between aux_date_table.start_date
and aux_date_table.end_date
第二个选项是:
select main_table.*
from main_table
where main_table.date between (select start_date from aux_date_table)
and (select end_date from aux_date_table)
哪个选项最有效?
答案 0 :(得分:2)
我将使用JOIN
而不是第一个选项或第二个选项,因为这样可以更清楚地说明您要做什么。
select main_table.* from main_table
INNER JOIN aux_date_table
ON main_table.data between aux_date_table.start_date and aux_date_table.end_date
您的第一个选择是CROSS JOIN,但样式过旧。
我建议您使用CROSS JOIN
而不是,
select main_table.*
from main_table CROSS JOIN aux_date_table
where main_table.data between aux_date_table.start_date and aux_date_table.end_date
如果您想选择哪个更快,我会选择第一个选项。
因为第二个选项在performance
比第一个更糟糕的情况下使用子查询。