所以,我有以下两个查询。在第一个查询中,rcv_transaction
表首先在 select 子句中按 TRANSACTION_TYPE 过滤,然后连接到其他表,而在第二个查询中,表首先连接,然后在 WHERE 子句中过滤。结果完全不同。第一个查询产生的结果几乎是第二个查询的两倍。对我来说,他们应该执行相同的任务。我在这里想念什么?有什么不同?
第一个。询问
SELECT pl.*
FROM po_headers_all ph,
po_lines_all pl,
(SELECT *
FROM rcv_transactions r
WHERE r.TRANSACTION_TYPE = 'DELIVER') rt
WHERE ph.PO_HEADER_ID = pl.PO_HEADER_ID
AND rt.po_header_id(+) = pl.po_header_id
AND rt.po_line_id(+) = pl.po_line_id
第二次查询
SELECT pl.*
FROM po_headers_all ph,
po_lines_all pl,
rcv_transactions rt
WHERE ph.PO_HEADER_ID = pl.PO_HEADER_ID
AND rt.po_header_id(+) = pl.po_header_id
AND rt.po_line_id(+) = pl.po_line_id
AND rt.transaction_type = 'DELIVER'