在postgresql中,在完全外部联接时,缺少只在一个表上的行

a0zr77ik  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(428)

我有两个表汇款和汇票,我试图找出什么是汇款和起草的区别。
这是我到目前为止所拥有的,但它没有给我只在其中一个表上的记录

SELECT remittance.loan_no, remittance.inv_loan_no, remittance.ll_remittance,
       draft.fm_loan_number, draft.draft_amount,
       (remittance.ll_remittance) - (draft.draft_amount) AS difference

FROM    remittance FULL JOIN draft

ON      remittance_.inv_loan_no = draft.fm_loan_number

WHERE  (remittance.ll_remittance) - (draft.draft_amount)<> 0.00;

可能是因为我在计算差额时,缺少的汇款或汇票金额中有空值,这就是为什么我没有得到差额的任何结果。
我原以为完全联接会给我只在其中一个表上,而在其他表列中为空的贷款。
谢谢您,
以下是示例数据:
汇款表、汇票表、查询结果
我用红色突出显示了查询结果中没有显示的贷款

e5njpo68

e5njpo681#

可能是因为我在计算差额时,缺少的汇款或汇票金额中有空值,这就是为什么我没有得到差额的任何结果。
对!添加 where 完全联接的子句总是很棘手的,因为筛选是在联接的数据集上进行的。
但是,我认为在 on 改为子句。

SELECT remittance.loan_no, remittance.inv_loan_no, remittance.ll_remittance,
       draft.fm_loan_number, draft.draft_amount,
       (remittance.ll_remittance) - (draft.draft_amount) AS difference

FROM    remittance FULL JOIN draft

ON      remittance_.inv_loan_no = draft.fm_loan_number
        AND (remittance.ll_remittance) - (draft.draft_amount)<> 0.00;
ckx4rj1h

ckx4rj1h2#

如果每个表中每个贷款只有一行,那么 coalesce() 就您的目的而言:

SELECT r.loan_no, r.inv_loan_no, r.ll_remittance,
       d.fm_loan_number, d.draft_amount,
       coalesce(r.ll_remittance, 0) - coalesce(d.draft_amount, 0) AS difference       
FROM  remittance r FULL JOIN
      draft d
      ON r.inv_loan_no = d.fm_loan_number
WHERE coalesce(r.ll_remittance, 0) <> coalesce(d.draft_amount, 0);

如果有多行,则需要预聚合。
这是一个sql小提琴。

相关问题