2017-12-21 2 views
0

Ich verwende AWS Redshift SQL. Ich möchte innerlich einer Unterabfrage beitreten, die eine Gruppierung und eine innere Verknüpfung enthält. Wenn ich einen Außenbeitritt mache; Ich erhalte eine Fehlermeldung, dass die Spalte nicht existiert.RedShift SQL-Unterabfrage mit Innerem Join

Abfrage:

SELECT  si.package_weight 
FROM  "packageproduct" ub "clearpathpin" cp ON ub.cpipr_number = cp.pin_number 
    INNER JOIN "clearpathpin" cp ON ub.cpipr_number = cp.pin_number 
    INNER JOIN (
    SELECT sf."AWB", SUM(up."weight") AS package_weight 
    FROM "productweight" up ON up."product_id" = sf."item_id" 
    GROUP BY sf."AWB" 
    HAVING sf."AWB" IS NOT NULL 
    ) AS si ON si.item_id = ub.order_item_id 
LIMIT 100; 

Ergebnis:

ERROR: column si.item_id does not exist 
+0

Bearbeiten Sie Ihre Frage und fügen Sie die Abfrage als * Text * kein * Bild *. –

+0

'FROM" Produktgewicht "auf ON up." Product_id "= sf." Item_id "' fehlt ein 'JOIN' –

+0

nicht richtig kopiert –

Antwort

1

Es ist einfach, weil column si.item_id does not exist

item_id In der select-Anweisung für die Tabelle productweight

und es sollte funktionieren.

+0

Ich versuche, die Gewichte zu sammeln, die in einem Luftwegrechnungspaket sind. Das Luftfrachtbriefpaket kann mehr als einen Artikel haben. Dies ist der ursprüngliche Grund, warum ich item_id nicht eingeschlossen habe, weil ich es nicht in der group by-Klausel haben möchte. –

0

Mit dieser Abfrage sind viele Dinge falsch.

Für Ihre Unterabfrage, haben Sie eine ON Aussage, aber es schließt sich nicht:

FROM "productweight" up ON up."product_id" = sf."item_id" 

Wenn Sie die Ergebnisse dieser Unterabfrage beitreten, werden Sie ein Feld verweisen, die innerhalb der Unterabfrage nicht vorhanden ist:

SELECT sf."AWB", SUM(up."weight") AS package_weight 
    ... 
    ) AS si ON si.item_id = ub.order_item_id 

Sie sollten sich die Unterabfrage so vorstellen, dass sie eine neue, separate, kurz vorhandene Tabelle erstellt. Die äußere Abfrage als verbindet diese temporäre Tabelle mit dem Rest der Abfrage. Alles, was nicht explizit zur Unterabfrage geführt hat, ist für die äußere Abfrage nicht verfügbar.

Ich würde empfehlen, wenn Sie entwickeln, schreiben Sie und führen Sie die Unterabfrage eigenständig zuerst aus. Erst nachdem die erwarteten Ergebnisse (keine Fehler, geeignete Spalten usw.) zurückgegeben wurden, können Sie sie als Unterabfrage kopieren und einfügen und mit der Entwicklung der Hauptabfrage beginnen.

Verwandte Themen