2017-10-31 2 views
0

Ich muss die alten Stil SQL Outer Join mit der Bedingung, um den neuen Stil zu implementieren.Wie man alten Stil Sql Outer Join mit der Bedingung in den neuen Stil zu konvertieren

Ich kann die letzte Zeile der Join mit Bedingung nicht konvertieren.

Old Style Abfrage:

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

Zeigen Sie uns Ihren neuen Stil Abfrageversuch. – jarlh

+0

Ich möchte diese Abfrage ohne die (+) Notation haben. –

+0

Ja, ich verstehe. Was hast du probiert? – jarlh

Antwort

0

Ich nehme an, Sie werden von der Oracle-Syntax gehen usw. SQLServer, die die ANSI-Syntax erfordert, was besser ist in der Regel für die Zukunft zu nutzen, unabhängig von der Datenbank

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

ist die gleiche wie

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

+0

Ich könnte konvertieren, so weit wie unten gezeigt. Brauche Idee auf die letzte Bedingung. –

+0

SELECT cpd.customer_ref, \t cpd.product_seq, bci.contract_inst_id, bci.start_dat bci_start_dat, bci.end_dat bci_end_dat FROM custproductdetails cpd LEFT OUTER JOIN balcontractinstance bci ON cpd.customer_ref = bci.customer_ref UND cpd.contract_seq = bci.contract_seq –

+0

Da ich plane, die obige Abfrage in HIVE –

0

Ich glaube, das tut, was Sie wollen:

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; 

Die allgemeine Regel ist, dass die Tabelle mit den (+) hinzugefügt zusätzlichen Zeilen verwiesen wird. Das macht es zur zweiten Tabelle in der LEFT JOIN.

+0

Danke für die Antwort. Es hat für mich funktioniert. –

0

Old Style Abfrage:

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(+); 

'New' Style Abfrage:

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; 

Wie Sie es ziemlich ähnlich sehen.

Verwandte Themen