我有一个查询可以工作,但要花费很长时间。我的"LastName“列是3个select查询。我知道一定有更好的办法。
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 > 0PMGTMAIN在LOANS和TAXES中每个记录都有几个/多个记录。
PMGTMAIN在OFFICER列中有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分钟。
发布于 2012-04-27 21:41:18
我担心我们通常需要更多的信息来解释为什么要花这么长时间,虽然我确实觉得创建起诉(如果它们还不存在的话)可能是你最好的选择。
不过,试试看,以防万一:
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哦--为什么你的表/列被命名为短名字?似乎大部分情况都会令人困惑。有些东西在暗示你的模式可能会被修改。
https://stackoverflow.com/questions/10357770
复制相似问题