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:列可能没有外部连接到子查询似乎已经这样做了,真不敢相信我没有看到这么简单的东西。谢谢你的帮助,我也会考虑你的建议。