在特定条件下将两个独立的内部连接组合成一个

时间:2016-04-28 16:21:09

标签: sql oracle

我有以下两个查询,如下所示,实际上两个查询都在内部使用内连接。现在我想将这两个查询合并为一个,但条件是column invo_id = 2和列invo_id的值在表ioa_invoice_line

所以三个表之间的关系

  1. ioa_invoice_line
  2. ioa_invoice_line_notes
  3. IOA_INV_LINE_NOTE_MAP
  4. 这些是查询

    select 
        e.id
        , e.invo_id
        , b.id
        , b.inli_id
    from 
        ioa_invoice_line e
    inner join 
        ioa_invoice_line_notes b on e.id = b.inli_id;
    
    select 
        e.id
        , b.id
        , b.ATTACHMENT_BLOB_ID
        , b.INV_LINE_NOTE_ID
    from 
        ioa_invoice_line_notes e
    inner join 
        IOA_INV_LINE_NOTE_MAP b on e.id = b.INV_LINE_NOTE_ID;
    

    ioa_invoice_line enter image description here

2 个答案:

答案 0 :(得分:0)

这就是我假设您想要进行连接的方式。因为你正在寻找两个条件:http 1) ioa_invoice_line.invo_id = 2
2) ioa_invoice_line.invo_id存在

由于您将检查invo_id是否等于2,因此如果它找到值为2,则可以非常确定它是否存在。

SELECT L.id, L.invo_id, LN.id, LNM.id, LNM.attachment_blob_id, LNM.inv_line_note_id
FROM ioa_invoice_line_notes LN
INNER JOIN ioa_invoice_line L ON LN.inli_id = L.id
INNER JOIN ioa_inv_line_note_map LNM ON LN.id = LNM.inv_line_note_id
WHERE L.invo_id = 2;

看起来您正在寻找Inv Line ID,Inv Line Invoice ID,Line Notes ID,Line Notes Map ID以及Notes Map表中的其他ID。

答案 1 :(得分:0)

查询将invo_id上的条件集成到连接中。由于它是内部联接,所选记录中invo_id的存在是免费的:

    select line.id                id_line
         , line.invo_id
         , notes.id               id_notes
         , notes.inli_id
         , map.id                 id_map
         , map.attachment_blob_id
         , map.inv_line_note_id
      from ioa_invoice_line       line
INNER JOIN ioa_invoice_line_notes notes on (
                                                 line.id      = notes.inli_id
                                             AND line.invo_id = 2
                                           )
INNER JOIN ioa_inv_line_note_map  map   on map.id = notes.inv_line_note_id
         ;