2017-11-08 10 views
1

Ich brauche ein wenig Hilfe bei der folgenden SQL-Abfrage:SQL Query (Oracle SQL)

SELECT AUF_EK.FIRM, AUF_EK.customer, AUF_EK.cnr, k.name1, 
k.name2, k.name3, k.street, k.pin, k.loc, r.name1, 
r.name2, r.name3, lo_gpname1, 

.....

Zuerst werden die ausgewählten Spalten, erhalte ich, dass so weit.

FROM AUFT, PARTNER r, PARTNER k, .... skp_ARTIKEL_Z, 

dann haben wir die von Klausel, aber warum gibt es ein Partner r und Partner k? Heißt das, der Tabellenname ist "Partner r" oder ist das ein anderer Grund, den ich noch nicht kenne?

WHERE (
    AUF.FIRM BETWEEN 123 AND 456 AND AUF.FIRM     = k.FIRM AND AUF.customer     = k.gpnr AND AUF.FIRM 
= k.FIRM AND AUF.customer     = k.gpnr AND AUF.art_nr = ART.art_nr  

Die where-Klausel bis hier macht Sinn für mich, so dass sie paßt grundsätzlich Spalten aus den ausgewählten Tabellen ...

AND EK_POS.art_nr    = 
ARTIKEL_Z.art_nr(+) AND NVL 
    (POS.pos_nr_zuo, 0) = (NVL (
     _EK_POS_PREIS.pos_nr_zuo(+), 0)) ) 

Aber hier den Teil ich nicht bekommen. Ich bin kein SQL Pro .... Was macht die (+)? Und was ist , 0 Bedeutung?

+0

Ist diese Abfrage Arbeit? Gibt es ein Problem damit? Sie stellen grundlegende Fragen, die jedes Buch oder jede SQL-Site sehr einfach beantworten kann. Entschuldige, dass du hart bist, aber du musst selbst mehr recherchieren, bevor du hier eine Frage stellst, um eine Antwort zu bekommen. Beispiel. 'NVL' ist eine Funktion, die sagt, wenn der erste Wert' NULL' ist, dann ersetze es mit 0 'NVL (POS.pos_nr_zuo, 0)' –

+1

Nun, es funktioniert nicht. Die Spalten von Partner r, k scheinen problematisch zu sein. Die zweite Sache ist, dass ich keine Ahnung habe und nie etwas gesehen habe, wo x.c = y.c (+) ist. Also ein Name/Definition für das (+) und was es tut wäre eine große Hilfe. –

+0

Verstanden. Wenn Sie eine Frage stellen, sollten Sie uns sagen, was nicht funktioniert und was Sie nicht verstehen. SQL unterscheidet sich von Plattform zu Plattform, aber die grundlegende Syntax sollte für alle gleich sein. Viel Glück! –

Antwort

1

Partner r und Partner k

Sie diese Antwort verweisen What's the best way to join on the same table twice?

Was bedeutet die (+) tut?

Siehe die Antwort von OMG Ponies

, die für ein OUTER JOIN, da das ANSI-89-Format (mit einem Komma in dem FROM-Klausel zu separaten Tabellenverweisen) Oracle spezifische Schreibweise ist standardisierte nicht Outer-Joins.

Die Abfrage würde wie in ANSI-92-Syntax neu geschrieben werden:

SELECT ... 
FROM a 
LEFT JOIN b ON b.id = a.id 

auch darauf hingewiesen, Es sollte, dass, obwohl die (+) arbeitet, empfiehlt Oracle es nicht verwenden

Und was ist, 0 bedeutet?

NVL (POS.pos_nr_zuo, 0), wenn der Wert von POS.pos_nr_zuo null ist, zurückgeben 0 als Standardwert

+0

Vielen Dank, ich hatte wirklich keine Ahnung, dass Oracle so sehr von MSSQL und was ich vorher gesehen habe. .. –

0

Sie fragte mehrere Fragen: über die PARTNER r:

In Ihrer Anfrage Sie PARTNER zweimal die Tabelle verweisen möchten, so können Sie es eine alias, erste geben r ist, die zweite ist k.

Es ist schwer zu sagen, wofür genau es verwendet wird, weil ich die ganze Abfrage nicht sehen kann. Aber ein einfaches Beispiel ist: Angenommen, Sie haben eine ADDRESSES Tabelle und eine ORDERS Tabelle. ORDERS hat zwei Referenzen auf Personen: BILLING_ADDR_ID und SHIPPING_ADDR_ID. Wenn Sie beide Adressen in einer Abfrage anzeigen möchten, benötigen Sie zwei Aliase.

Über die (+) - Es ist eine alte Syntax für LEFT OUTER JOIN. Über die ',0 - Es ist Teil der NVL(...,0) Ausdruck.

+0

Vielen Dank, ich hatte wirklich keine Ahnung, dass Oracle sich so sehr von MSSQL unterscheidet und was ich vorher gesehen habe ... –