我有以下两个查询,如下所示,实际上两个查询都在内部使用内连接。现在我想将这两个查询合并为一个,但条件是column invo_id = 2
和列invo_id
的值在表ioa_invoice_line
所以三个表之间的关系
ioa_invoice_line
ioa_invoice_line_notes
IOA_INV_LINE_NOTE_MAP
这些是查询
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
答案 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
;