Oracle在FROM中使用子查询有效地连接表

哈迪克

表格1:

| account_no | **other columns**...
+------------+-----------------------
| 1          |
| 2          |
| 3          |
| 4          |

表 2:

| account_no | TX_No | Balance | History    |
+------------+-------+---------+------------+
| 1          | 123   |  123    | 12.01.2011 |
| 1          | 234   |  2312   | 01.03.2011 |
| 3          | 232   |  212    | 19.02.2011 |
| 4          | 117   |  234    | 24.01.2011 |

我有多个连接查询,查询中的一个表(表 2)有问题,因为它是一个计算许多其他事物的视图,这就是为什么对该表的每个查询都是昂贵的。从表 2 中,对于account_no表 1 中的每个我都需要具有最大 的整行TX_NO,这就是我的做法:

SELECT * FROM TABLE1 A LEFT JOIN 
            ( SELECT 
                    X.ACCOUNT_NO, 
                    HISTORY, 
                    X.BALANCE 
              FROM TABLE2 X INNER JOIN 
                (SELECT 
                        ACCOUNT_NO, 
                        MAX(TX_NO) AS TX_NO 
                FROM TABLE2 
                GROUP BY ACCOUNT_NO) Y ON X.ACCOUNT_NO = Y.ACCOUNT_NO) B 
            ON B.ACCOUNT_NO = A.ACCOUNT_NO

正如我最初理解的那样,它将对Table2 中的所有行进行内部连接,然后将需要account_no左连接Table1 进行连接,这是我想避免的。

我的问题:有没有办法只找到Table1 中的max(TX_NO)那些帐户而不是遍历所有帐户我认为这将有助于提高查询速度。

蒂姆·比格莱森

我认为您走在正确的轨道上,但我认为您不需要,而且我自己也不会按照您所做的方式嵌套子查询。相反,如果您想获取表 1 中的每条记录和表 2 中匹配的最大记录,您可以尝试以下操作:

SELECT * FROM TABLE1 t1
LEFT JOIN
(
    SELECT t.*,
        ROW_NUMBER() OVER (PARTITION BY account_no ORDER BY TX_No DESC) rn
    FROM TABLE2 t
) t2
    ON t1.account_no = t2.account_no AND
       t2.rn = 1

如果你想继续你原来的方法,我会这样做:

SELECT *
FROM TABLE1 t1
LEFT JOIN TABLE2 t2
    ON t1.account_no = t2.account_no
INNER JOIN
(
    SELECT account_no, MAX(TX_No) AS max_tx_no
    FROM TABLE2
    GROUP BY account_no
) t3
    ON t2.account_no = t3.account_no AND
       t2.TX_No      = t3.max_tx_no

我们没有使用窗口函数来查找 中每个帐户的最大记录TABLE2,而是使用第二个连接到子查询。我希望窗口函数方法比这种双连接方法表现得更好,一旦你习惯了它,它会更容易阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何有效地从SAS更新Oracle表?

来自分类Dev

查询优化-使用SQL有效地整理一对多关系表的结果

来自分类Dev

有效地在libgdx中使用多个纹理

来自分类Dev

有效地使用ConcurrentHashMap?

来自分类Dev

有效地使用parfor

来自分类Dev

有效地连接两个以上的数据表

来自分类Dev

如何有效地连接多个表中的多行

来自分类Dev

SQL,通过移列有效地连接同一表

来自分类Dev

在子字符串上有效地合并表,而不是完美匹配

来自分类Dev

更有效地执行连接和更新

来自分类Dev

最有效地执行条件连接

来自分类Dev

简单有效地连接CSV文件

来自分类Dev

有效地连接数据帧

来自分类Dev

有效地连接大矩阵的长列表

来自分类Dev

索引全文搜索查询以有效地扇出

来自分类Dev

如何有效地查询网络(范围)?

来自分类Dev

使用另一个表的聚合有效地更新表

来自分类Dev

PySpark如何使用不匹配的密钥有效地连接2个DataFrame

来自分类Dev

如何通过远程连接有效地使用3D?

来自分类Dev

如何从长表有效地创建SparseDataFrame?

来自分类Dev

从多个来源有效地更新表

来自分类Dev

如何有效地更新表的列值?

来自分类Dev

如何使用Sails.js / Waterline有效地分页大量查询结果?

来自分类Dev

如何有效地使用WordPress内置函数查询wp_usermeta?

来自分类Dev

如何使用Sails.js / Waterline有效地分页大量查询结果?

来自分类Dev

如何使用Python有效地选择子矩阵?

来自分类Dev

如何使用子流程有效地测试基于readline的Python程序?

来自分类Dev

如何有效地让“ ParentFont = False”子控件使用与父控件相同的字体名称?

来自分类Dev

如何使用子流程有效地测试基于readline的Python程序?

Related 相关文章

热门标签

归档