リモートDBとのDBリンクを使用して接続されたOracleデータベースがあります。リモート DB は OUTER JOIN とは何の関係もありません。そのため、異機種間サービスはクエリをいくつかの単純なクエリに変換し、結果を連結します。
たとえば、3 つのテーブルがあります。
create table join_email
(
EMAIL_ID FLOAT(10)
SENDER VARCHAR2(128)
)
INSERT INTO join_email VALUES (1,'bmdrrfh@gmail.com')
INSERT INTO join_email VALUES (2,'n3qcd@gmail.com')
create table join_email_receivers
(
EMAIL_ID FLOAT(10)
RECEIVER VARCHAR2(128)
)
INSERT INTO join_email_receivers VALUES (1,'9wtcptyzn@yahoo.com')
INSERT INTO join_email_receivers VALUES (1,'8w7o5@yahoo.com')
INSERT INTO join_email_receivers VALUES (1,'jlwtc@yahoo.com')
INSERT INTO join_email_receivers VALUES (2,'fpm@yandex.ru')
INSERT INTO join_email_receivers VALUES (2,'a@mail.com')
create table join_email_cc
(
EMAIL_ID FLOAT(10)
CC VARCHAR2(128)
)
INSERT INTO join_email_cc VALUES (1,'rg1yzjc@mail.com')
1 番目のテーブルから行をクエリし、2 番目と 3 番目の行を email_id で結合したままにします。私のクエリは次のようになります。
select em.sender, emr.receiver, emcc.cc
from join_email@DG4 em
LEFT JOIN join_EMAIL_RECEIVERS@DG4 emr on emr.email_id=em.email_id
LEFT JOIN join_EMAIL_CC@DG4 emcc on emcc.email_id=em.email_id
where em.sender = 'bmdrrfh@gmail.com' and emr.receiver = '9wtcptyzn@yahoo.com';
問題は、異機種間サービスがこのクエリを次の 2 つのクエリに変換することです。
<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"='bmdrrfh@gmail.com' AND A1."RECEIVER"='9wtcptyzn@yahoo.com'>
と
<SELECT "CC","EMAIL_ID" FROM "JOIN_EMAIL_CC">
2 番目のクエリは間違った FULL SCAN クエリです。email_id による WHERE 句である必要があります。
私の質問は、異機種間サービスにクエリを正しい順序で変換する方法を伝える方法ですか?