gpt4 book ai didi

java - 通过 Java 程序连接列和运行查询时使用别名

转载 作者:行者123 更新时间:2023-11-29 02:58:51 27 4
gpt4 key购买 nike

我想连接两列并在查询时为这些列使用别名。查询是这样的:

     select distinct T1.*,
T1.FieldA || ',' || FieldB from table1 T1
join ( select FieldA || ',' || FieldB as criteria from table2 where
create_dateTime >= to_timestamp('10-NOV-14 01.01.01.000000000 PM','DD-MON-RR HH.MI.SS.FF AM') and
create_dateTime <= to_timestamp('19-NOV-14 01.01.01.000000000 PM','DD-MON-RR HH.MI.SS.FF AM'))
T2 on (T1.FieldA || ',' || FieldB = T2.criteria) ORDER BY T1.FieldA || ',' || FieldB;

这个查询在 Oracle 中对我有用。它也适用于 MYSQL、MS SQL、DB2 吗?

还有其他写这个查询的方法吗?

最佳答案

您想将此 Oracle 查询转换为 MySQL。首先,让我们尝试对其进行整体优化。您正在加入一个计算字段(通过串联计算)。那肯定会很慢。为什么不简单地加入连接中的字段,就像这样:

from table1 T1 
join table2 T2 ON T1.FieldA = T2.FieldA AND T1.FieldB = T2.FieldB

现在,可能有一些复杂的数据相关的原因这行不通。但我对此深表怀疑。

其次,您使用的是普通 (INNER) JOIN,因此时间戳选择不需要出现在子查询中。这意味着您的 Oracle 特定查询可以像这样重构。对于您的 dbms 来说,这很多更容易处理。

select distinct
T1.*,
T1.FieldA || ',' || T1.FieldB AS criteria
from table1 T1
join table2 T2 ON T1.FieldA = T2.FieldA AND T1.FieldB = T2.FieldB
where T2.create_dateTime >=
to_timestamp('10-NOV-14 01.01.01.000000000 PM','DD-MON-RR HH.MI.SS.FF AM')
and T2.create_dateTime <=
to_timestamp('19-NOV-14 01.01.01.000000000 PM','DD-MON-RR HH.MI.SS.FF AM')
ORDER BY T1.FieldA || ',' || T1.FieldB;

在您的 Oracle 系统中试试这个。您可能会对性能改进感到高兴。

最后,您需要将连接和日期处理更改为特定于 MySQL。这很容易。

select distinct
T1.*,
CONCAT(T1.FieldA, ',', T1.FieldB) AS criteria
from table1 T1
join table2 T2 ON T1.FieldA = T2.FieldA AND T1.FieldB = T2.FieldB
where T2.create_dateTime >= '2014-11-10 13:01:01'
and T2.create_dateTime <= '2014-11-19 13:01:01'
ORDER BY CONCAT(T1.FieldA, ',', T1.FieldB);

关于java - 通过 Java 程序连接列和运行查询时使用别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26929148/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com