2017-10-31 10 views
0

新しいスタイルの条件付きで古いスタイルのSQL外部結合を実装する必要があります。古いスタイルのSql外部結合を条件付きで新しいスタイルに変換する方法

参加条件の最後の行を変換できません。

古いスタイルのクエリ:

SELECT cpd.customer_ref, cpd.product_seq, bci.contract_inst_id, 
bci.start_dat bci_start_dat, bci.end_dat bci_end_dat 
FROM custproductdetails cpd, balcontractinstance bci 
WHERE cpd.customer_ref = bci.customer_ref(+) 
AND cpd.contract_seq = bci.contract_seq(+) 
AND cpd.end_dat >= bci.start_dat(+) AND cpd.end_dat <= bci.end_dat(+); 
+0

新しいスタイルのクエリをお試しください。 – jarlh

+0

私は(+)表記なしでその質問をしたいです。 –

+0

はい、わかりました。何を試しましたか? – jarlh

答えて

0

私はあなたが関係なく、データベースの

、一般的には今後使用することをお勧めしますANSI構文を、必要とする、などのSQLServerするOracle構文から行っていると仮定

Select a.a,b.a From a left join b on a.a = b.a

Select a.a, b.a From a, b Where a.a = b.a(+)

と同じです
+0

これまでのところ、以下のように変換することができました。最後の条件について考えが必要です。 –

+0

SELECT cpd.customer_ref、 \t cpd.product_seq、 bci.contract_inst_id、bci_start_dat bci.start_dat 、LEFT OUTER JOINをcustproductdetailsのCPD FROM bci_end_dat bci.end_dat balcontractinstance BCI ON cpd.customer_ref = bci.customer_ref AND cpd.contract_seq = bci.contract_seq –

+0

私は上記のクエリをHIVEで実行するつもりです –

0

私はこれが何をしたいん信じる:

SELECT cpd.customer_ref, cpd.product_seq, bci.contract_inst_id, 
     bci.start_dat bci_start_dat, bci.end_dat bci_end_dat 
FROM custproductdetails cpd LEFT JOIN 
    balcontractinstance bci 
    ON cpd.customer_ref = bci.customer_ref AND 
     cpd.contract_seq = bci.contract_seq AND 
     cpd.end_dat >= bci.start_dat AND 
     cpd.end_dat <= bci.end_dat; 

一般的なルールは(+)で参照されるテーブルが追加の行が追加されるということです。それはLEFT JOINの2番目のテーブルになります。

+0

お返事ありがとうございます。それは私のために働いた。 –

0

古いスタイルのクエリ:

SELECT cpd.customer_ref, cpd.product_seq, bci.contract_inst_id, 
    bci.start_dat bci_start_dat, bci.end_dat bci_end_dat 
    FROM custproductdetails cpd, balcontractinstance bci 
    WHERE cpd.customer_ref = bci.customer_ref(+) 
    AND cpd.contract_seq = bci.contract_seq(+) 
    AND cpd.end_dat >= bci.start_dat(+) 
    AND cpd.end_dat <= bci.end_dat(+); 

'新規' スタイルクエリ:

SELECT cpd.customer_ref, cpd.product_seq, bci.contract_inst_id, 
    bci.start_dat bci_start_dat, bci.end_dat bci_end_dat 
    FROM custproductdetails cpd LEFT JOIN balcontractinstance bci 
    ON cpd.customer_ref = bci.customer_ref 
    AND cpd.contract_seq = bci.contract_seq 
    AND cpd.end_dat >= bci.start_dat 
    AND cpd.end_dat <= bci.end_dat; 

あなたはそれはかなり似て見ることができるように。

関連する問題