我正在使用NETEZZA,我想在日期之前加入两个单独的表。在第一个表中,日期存储为类型"日期" (例如,2014-09-10)在第二个表中,日期存储为类型" int4" (20140910)。我已经尝试按日期加入表格:
select *
from table1 a inner join table2 b
on date(a.start_date) = to_date(b.start_date, 'YYYYMMDD')
这样运行但很慢。我建议我,如果我可以将table1中的日期转换为int4,然后简单地比较int4' s,那么比较可能会快得多。但是,我无法找到办法,或者这是最好的方法。
答案 0 :(得分:1)
以下是您的查询:
select *
from table1 a inner join
table2 b
on date(a.start_date) = to_date(b.start_date, 'YYYYMMDD');
通常,数据库在连接不同类型的列或与函数连接时非常困难。原因有两个:功能使得使用索引变得困难(或不可能)。不同类型列的统计信息不兼容。
但是,如果将所有功能移到一侧,引擎可能会执行某些操作。例如:
select *
from table1 a inner join
table2 b
on b.start_date = cast(to_char(a.start_date, 'YYYYMMDD') as int);
这一方面完成了所有转换。如果您在b.start_date
上有索引,则可以扫描table1
并在索引中查找相应的值。因此,这个版本可能运行得更快,但不如表格使用相同的类型。
答案 1 :(得分:0)
尝试相同的日期类型,这可能会起作用
SELECT *
FROM table1 a
INNER JOIN table2 b
ON (to_date(a.start_date,'YYYY-MM-DD') = to_date (b.start_date, 'YYYY-MM-DD'))