2014-10-29 32 views
0

我有一個使用DB鏈接與遠程數據庫連接的Oracle數據庫。我的遠程數據庫與OUTER JOIN無關,這就是爲什麼異構服務將我的查詢轉換爲多個簡單查詢並連接結果的原因。Left使用Oracle Heterogeneous Service加入錯誤轉換

比如我有3個表:

create table join_email 
(
EMAIL_ID FLOAT(10) 
SENDER VARCHAR2(128) 
) 
INSERT INTO join_email VALUES (1,'[email protected]') 
INSERT INTO join_email VALUES (2,'[email protected]') 

create table join_email_receivers 
(
EMAIL_ID FLOAT(10) 
RECEIVER VARCHAR2(128) 
) 
INSERT INTO join_email_receivers VALUES (1,'[email protected]') 
INSERT INTO join_email_receivers VALUES (1,'[email protected]') 
INSERT INTO join_email_receivers VALUES (1,'[email protected]') 
INSERT INTO join_email_receivers VALUES (2,'[email protected]') 
INSERT INTO join_email_receivers VALUES (2,'[email protected]') 

create table join_email_cc 
(
EMAIL_ID FLOAT(10) 
CC VARCHAR2(128) 
) 
INSERT INTO join_email_cc VALUES (1,'[email protected]') 

我想查詢從1和錶行和左邊EMAIL_ID加入來自第2和第3行。 我的查詢是這樣的:

select em.sender, emr.receiver, emcc.cc 
from [email protected] em 
LEFT JOIN [email protected] emr on emr.email_id=em.email_id 
LEFT JOIN [email protected] emcc on emcc.email_id=em.email_id 
where em.sender = '[email protected]' and emr.receiver = '[email protected]'; 

問題是異構服務轉換此查詢到以下兩個查詢:

<SELECT A2."EMAIL_ID",A2."SENDER",A1."RECEIVER" FROM "JOIN_EMAIL" A2,"JOIN_EMAIL_RECEIVERS" A1 WHERE A1."EMAIL_ID"=A2."EMAIL_ID" AND A2."SENDER"='[email protected]' AND A1."RECEIVER"='[email protected]'> 

<SELECT "CC","EMAIL_ID" FROM "JOIN_EMAIL_CC"> 

第二屆查詢是FULL SCAN查詢是錯的,它應該是email_id的WHERE子句。

我的問題是,如何告訴異構服務如何以正確的順序轉換我的查詢?

回答

0

第一個LEFT OUTER JOIN實際上是INNER JOIN,因爲列emr.receiver上的等式謂詞,因此它被Oracle正確轉換。

如果運行在遠程站點上的RDBMS本身支持外部連接,則可以在遠程站點上創建一個視圖,而不用WHERE子句,例如,

在遠程站點(DG4在你的例子):

create view my_view as 
select em.sender, emr.receiver, emcc.cc 
from join_email em 
LEFT JOIN join_EMAIL_RECEIVERS emr on emr.email_id=em.email_id 
LEFT JOIN join_EMAIL_CC emcc on emcc.email_id=em.email_id 

,然後在本地站點:

select * 
    from [email protected] 
where em.sender = '[email protected]' 
    and emr.receiver = '[email protected]' 
+0

馬可,THX您的回覆,可惜的是我的遠程RDBMS不支持外連接和意見。還有其他想法嗎? – fen1ksss 2014-10-29 14:57:36

+0

沒人能幫助我? – fen1ksss 2014-10-30 13:06:25