select
    ep_vendor_invoice_header.vendor_id,   
    ep_vendor_invoice_header.invoice_number,   
    ep_vendor_invoice_header.due_date,   
    ep_vendor_invoice_header.invoice_billing_amount,   
    ep_vendor_invoice_header.portfolio_id,   
    ep_vendor_invoice_header.invoice_status,   
    ep_vendor_invoice_header.invoice_type,   
    ep_vendor_invoice_header.po_billing_amount,   
    ep_vendor_invoice_header.vendor_invoice_header_seq,   
    ep_po_detail.po_number,   
    ep_po_detail.line_number,   
    ep_po_detail.detail_number,   
    ep_po_detail.detail_type_code,   
    ep_po_detail.gl_posting_code,   
    ep_po_detail.transaction_type,   
    ep_po_detail.asset_id,   
    ep_po_detail.unit_amount,   
    ep_po_detail.status,   
    ep_po_detail.total_tax_amount,   
    ep_po_detail.tax_option,
    ep_po_detail.vendor_paid_date,
    ep_po_detail.vendor_paid_check,
    ep_po_detail.customer_id,
    ep_po_detail.gl_posted,
    ep_po_detail.serial_number,
    ep_po_detail.mfg_code,
    ep_po_detail.mfg_model_code,
    ep_po_detail.ship_to_id,
    ep_gl_posting_trans.gl_posting_group_code,   
    ep_gl_posting_trans.gl_contract_detail_type_code,   
    ep_gl_posting_trans.gl_posting_group_sub_code,   
    ep_gl_posting_trans.gl_posting_type_code,   
    ep_gl_posting_trans.gl_account_number,
    ep_invoice_customer.depreciation_group_code,
    cash.gl_account_number as cash_account
from
    ep_vendor_invoice_header    join ep_po_detail on
        ep_po_detail.portfolio_id = ep_vendor_invoice_header.portfolio_id and
        ep_po_detail.vendor_id = ep_vendor_invoice_header.vendor_id and
        ep_po_detail.status in ('RECEIVED', 'RECEIVED-A', 'OPEN')    left join ep_gl_posting_trans on
        ep_gl_posting_trans.gl_posting_group_code        = ep_po_detail.gl_posting_code and
        ep_gl_posting_trans.gl_contract_detail_type_code = ep_po_detail.detail_type_code and
        ep_gl_posting_trans.transaction_type             = ep_po_detail.transaction_type and
        ep_gl_posting_trans.portfolio_id                 = ep_vendor_invoice_header.portfolio_id and
        ep_gl_posting_trans.gl_posting_group_sub_code    = 'ACCTPAY' and
        (ep_gl_posting_trans.gl_process_code = 'AP Payment' or dbo.GLAccountsUseProcessCode() = 'N')    left join ep_gl_posting_trans cash on
        ep_gl_posting_trans.gl_posting_group_code        = ep_po_detail.gl_posting_code and
        ep_gl_posting_trans.gl_contract_detail_type_code = ep_po_detail.detail_type_code and
        ep_gl_posting_trans.transaction_type             = ep_po_detail.transaction_type and
        ep_gl_posting_trans.portfolio_id                 = ep_vendor_invoice_header.portfolio_id and
        ep_gl_posting_trans.gl_posting_group_sub_code    = 'CASH' and
        (ep_gl_posting_trans.gl_process_code = 'AP Payment' or dbo.GLAccountsUseProcessCode() = 'N')
        
    join ep_invoice_customer on
        ep_invoice_customer.customer_id = ep_vendor_invoice_header.vendor_idwhere
    ((RTrim(ep_vendor_invoice_header.invoice_number) + LTrim(Str(ep_vendor_invoice_header.vendor_invoice_header_seq))) = (RTrim(ep_po_detail.vendor_invoice_number) + LTrim(Str(ep_po_detail.vendor_invoice_header_seq)))) and
    ep_vendor_invoice_header.due_date <= :rtr_due_dt and
    (
        ep_vendor_invoice_header.vendor_id = :rtr_vendor_id and
        ep_vendor_invoice_header.invoice_status = :rtr_invoice_status and
        ( (rtrim(ep_vendor_invoice_header.invoice_number) + ltrim(Str(ep_vendor_invoice_header.vendor_invoice_header_seq))) in ( :rtr_invoice_number ) ) and
        ep_gl_posting_trans.gl_posting_group_sub_code = 'ACCTPAY'
    )
以上是一个复杂的sql,我的问题是:
希望可以弄清表之间的关联关系,上面有两个left join 和两个join,到底是哪两张表进行了left join?分别哪张是主表?哪两张表进行了join?
谢谢各位大虾的帮忙及参与 ,,,分数有限,等发财后再补上 (-: