0

所以我select statement用 an 写了一个outer join,但我遇到了一些逻辑问题。首先是声明:

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

现在这应该是如何工作的,并不是所有的账户都会出现在legal_recall表格中,特别是如果他们的账户没有被召回,但我仍然需要查明是否通过legal_bankruptcy. 我也知道这没有select statement返回任何内容的原因rows是因为这一行:

AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)

当我将其注释掉时,我会返回值。不过,我现在遇到的问题是,当有一个帐户时,legal_recall我需要确保我得到了最新的文件。如果我把那条线去掉,那么我可能会得到错误的日期,这会弄乱我的输出。

我在问他们是否可以解决这个问题,或者我是否陷入困境。提前致谢。

4

2 回答 2

1

我认为您可以通过更改此行来解决您的问题:

AND lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT)

AND (lr.file_date is null or lr.file_date = (SELECT MAX(file_date) FROM legal_recall WHERE ACCOUNT = ah.ACCOUNT))

但是,我建议您使用 ANSI 标准连接语法重写查询。

于 2013-09-06T16:01:23.327 回答
0

尝试这个?

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
于 2013-09-06T15:00:36.570 回答