首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL效率-3作为列的嵌套选择严重滞后。

SQL效率-3作为列的嵌套选择严重滞后。
EN

Stack Overflow用户
提问于 2012-04-27 21:00:29
回答 1查看 1.8K关注 0票数 1

我有一个查询可以工作,但要花费很长时间。我的"LastName“列是3个select查询。我知道一定有更好的办法。

代码语言:javascript
复制
SELECT LOANS.BALANCE, TAXES.TAX_DUE,
       (SELECT SBAOFFCR.LAST_NAME 
        FROM SBAOFFCR 
        WHERE SBAOFFCR.INITIALS = 
              (SELECT PMGTMAIN.OFFICER 
               FROM PMGTMAIN 
               WHERE PMGTMAIN.BOC_NUM_STRING = LOANS.BOC_NUM_STRING 
               AND PMGTMAIN.SEQ =
                   (SELECT MAX(SEQ) 
                    FROM PMGTMAIN 
                    WHERE PMGTMAIN.BOC_NUM_STRING 
                                             = LOANS.BOC_NUM_STRING))) AS LastName

FROM LOANS 
LEFT JOIN TAXES 
ON LOANS.BOC_NUM_STRING = TAXES.BOC_NUM_STRING
WHERE LOANS.BALANCE > 0

PMGTMAINLOANSTAXES中每个记录都有几个/多个记录。

PMGTMAINOFFICER列中有employee intials,它可以在SBAOFFCR表中作为列INITIALS引用,而在SBAOFFCR表中,有一个LAST_NAME列,这是我从LOANS/TAXES联接中所需要的每条记录。

我不能从PMGTMAIN WHERE LOANS.BOC_NUM_STRING = PMGTMAIN.BOC_NUM_STRING那里拿走任何PMGTMAIN WHERE LOANS.BOC_NUM_STRING = PMGTMAIN.BOC_NUM_STRING,它必须是有MAX(PMGTMAIN.SEQ)的那个。就像我说的,我的查询有效,但需要10分钟。

EN

回答 1

Stack Overflow用户

发布于 2012-04-27 21:41:18

我担心我们通常需要更多的信息来解释为什么要花这么长时间,虽然我确实觉得创建起诉(如果它们还不存在的话)可能是你最好的选择。

不过,试试看,以防万一:

代码语言:javascript
复制
SELECT Loans.balance, COALESCE(Taxes.tax_due, 0), SbaOffcr.last_name
FROM Loans
LEFT JOIN Taxes
ON Taxes.boc_num_string = Loans.boc_num_string
JOIN Pmgtmain as Main
ON Main.boc_num_string = Loans.boc_num_string
LEFT JOIN Pmgtmain as Exclude
ON Exclude.boc_num_string = Loans.boc_num_string
AND Main.seq < Exclude.seq
JOIN SbaOffcr
ON SbaOffcr.initials = Pmgtmain.Officer
WHERE Loans.balance > 0
AND Exclude.boc_num_string IS NULL

哦--为什么你的表/列被命名为短名字?似乎大部分情况都会令人困惑。有些东西在暗示你的模式可能会被修改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10357770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档