2016-04-17 9 views
2

Kann mir bitte jemand helfen, diesen SQL-Code zu verstehen? Das ist, was mich wirklich verwirrend ist mehr - ENDE = G.CODEBenötigen Sie Hilfe zum Verständnis dieser SQL-Abfrage?

SELECT something, something 
FROM ABCD A 
JOIN GHIJ G ON 
    CASE  
     WHEN A.CODE = 'not available' THEN 'NA_CODE' 
     ELSE A.CODE END = G.CODE 
        LEFT JOIN PRODUCT P ON P.ID = A.ID 
        WHERE P.ID IS NULL; 
GO   

Dank Isha

+0

Entschuldigung, ich tat es jetzt – Newbie

+1

@RanchiRhino Danke !! – Newbie

Antwort

3

Wenn man sich richtig Code formatiert schauen Sie werden es verstehen.

CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END = G.CODE 

betrachten die Join-Klausel wie

B.XYZ = G.CODE 

Wo B.XYZ zur Manipulation Joinspalte A.CODE für Werte eine case-Anweisung ist ‚nicht verfügbar‘ zu 'NA_CODE', so dass sie denselben Wert in G.CODE passen könnte. Außer dem Wert 'nicht verfügbar' ist alles in Ordnung, so dass die Case-Anweisung nur 'nicht verfügbar' an 'NA_CODE' manipuliert, so dass die Join-Klausel es mit dem Wert innerhalb G.CODE übereinstimmen konnte.

Suchen Sie nach Case-Anweisung für weitere Details.

Ich hoffe, Sie verstanden.

hier: -

B.XYZ =[CASE WHEN A.CODE = 'not available' THEN 'NA_CODE' ELSE A.CODE END]

+0

Ich denke, Sie haben mit Case-Anweisung zu kämpfen, es hat einen Anfang mit CASE und endet mit END zwischen CASE .... END jede Calucaltion kommt als einzelne Spalte Werte. – RanchiRhino

+0

Millionen Dank an Sie, Mann. Ich hatte wirklich seit Tagen mit diesem Code gekämpft. Du bist ein Retter :) – Newbie

+0

Willkommen @IshaGupta .... :-) – RanchiRhino

1

Es gibt mehr Sie in dieser Abfrage verstehen müssen.

Sie haben eine gute Antwort für die "CASE ... END = G.CODE" - in der Tat ist der Punkt, dass "END" nicht von selbst existiert, es ist das letzte Schlüsselwort in der Syntax CASE-Ausdruck .

Beachten Sie, dass Ihre Abfrage keine Zeilen zurückgibt. Dies liegt daran, am Ende Sie

...LEFT JOIN PRODUCT P ON P.ID = A.ID 
    WHERE P.ID IS NULL 

Reihen mit P.ID haben „IS NULL“ sind in der LINKEN nicht zurückgegeben JOIN - nur Zeilen, in denen P.ID = A.ID und Zeilen, in denen A.ID NULL werden zurückgegeben. (Wenn P.ID NULL ist, ist die Gleichheit mit A.ID UNBEKANNT, daher wird die Zeile NICHT zurückgegeben.)

+0

hey, danke ich habe Ihren Punkt, aber wir versuchen, neue Datensätze aus Tabelle A in Tabelle P einfügen, so wenn neue Datensätze in Tabelle A, die nicht bereits in Tabelle P sind, sollte diese Abfrage richtig funktionieren? Meine Abfrage ist tatsächlich INSERT IN A, SELECT ETWAS ETWAS ........... – Newbie

+0

Schwer zu sagen, ohne Ihren tatsächlichen Code zu sehen; Ich bin geneigt, "NEIN" zu sagen, da die Auswahl ausgewertet wird, bevor Sie zu irgendeinem "Einfüge" -Teil kommen. Veröffentlichen Sie Ihre gesamte INSERT-Anweisung, wenn Sie Hilfe benötigen. – mathguy

+0

INSERT INTO PRODUCT GlobalID TYPE BLOCK COLOR CODE \t A.GLOBALID \t A.TYPE A.BLOCK A.COLOR G.CODE FROM ABCD eine SELECT JOIN GHIJ G ON CASE WENN A.CODE = 'nicht verfügbar' DANN 'NA_CODE' ELSE A.CODE END = G.CODE LINKE VERBINDUNGSPRODUKT P ON P.ID = A.ID WHERE P.ID ist NULL; GO – Newbie

Verwandte Themen