Sql 外接故障
因此,我编写了一个带有Sql 外接故障,sql,oracle,outer-join,Sql,Oracle,Outer Join,因此,我编写了一个带有外部连接的select语句,其中一些逻辑出现了问题。首先,以下是声明: SELECT DISTINCT ah.ACCOUNT, lr.recall_status, lr.cancel_recall, lr.suit_atty, lb.note_sent, lb.current_atty, lr.file_date, ah.attorney_id, ah.transaction_date, rle.id_code, ah.rule_id,
外部连接的select语句
,其中一些逻辑出现了问题。首先,以下是声明:
SELECT DISTINCT ah.ACCOUNT, lr.recall_status, lr.cancel_recall, lr.suit_atty, lb.note_sent, lb.current_atty,
lr.file_date, ah.attorney_id, ah.transaction_date, rle.id_code, ah.rule_id, lr.processed, ah.transaction_code
FROM legal_bankruptcy lb, legal_recall lr, legal_transaction_review ah, atlas.rlglenty rle
WHERE ah.ACCOUNT = lb.ACCOUNT
AND ah.ACCOUNT = lr.ACCOUNT(+)
AND lb.current_atty = rle.id_code
AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)
AND ah.rule_id IN (1,2,114,191)
AND ah.batch_id = p_batch_id
现在,这应该是如何工作的,不是所有的帐户都会在合法的\u召回
表中,特别是如果他们的帐户没有被召回,但我仍然需要知道是否通过合法的\u破产
向公司发送了通知。我还知道此select语句
不返回任何行
的原因是因为这行:
AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)
AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)
当我将其注释掉时,返回值。不过,我现在遇到的问题是,当账户处于legal\u recall
状态时,我需要确保我得到了最新的文件。如果我把那一行删掉,我可能会得到错误的日期,这会扰乱我的输出
我在问他们是否有办法解决这个问题,或者我是否陷入了困境。提前谢谢。试试这个
AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)(+)
编辑:
好吧,您的sql很难读取,所以我对它进行了一些重新格式化(我从来没有使用过“(+)”语法),但请尝试一下:
SELECT DISTINCT ah.ACCOUNT,
lr.recall_status,
lr.cancel_recall,
lr.suit_atty,
lb.note_sent,
lb.current_atty,
lr.file_date,
ah.attorney_id,
ah.transaction_date,
rle.id_code,
ah.rule_id,
lr.processed,
ah.transaction_code
FROM legal_bankruptcy lb
LEFT OUTER JOIN legal_recall lr
ON lr.file_date = (SELECT MAX(file_date)
FROM legal_recall
WHERE ACCOUNT = ah.ACCOUNT)
JOIN legal_transaction_review ah
ON ah.rule_id IN (1,2,114,191)
AND lb.ACCOUNT = ah.ACCOUNT
AND p_batch_id = ah.batch_id
JOIN atlas.rlglenty rle
ON lb.current_atty = rle.id_code
我认为您可以通过更改以下行来解决问题:
AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)
AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)
到
但是,我建议您使用ANSI标准联接语法重写查询。Nope不能这样做。只是给出了ORA-00933:SQL命令没有正确的Ended没有骰子,我认为它不喜欢select语句上的连接
ORA-01799:列可能没有外部连接到子查询似乎已经这样做了,真不敢相信我没有看到这么简单的东西。谢谢你的帮助,我也会考虑你的建议。