![]() |
Re: Select mit SubSelect summieren
Hallo Thorsten,
wenn ich das ganze richtig verstehe, vergibst Du dem SubSelect einen Namen in diesem Fall "x" bzw. "y", nette Idee wusste nicht das dies überhaupt möglich ist. Wenn ich mir die Selects von innen nach aussen anschaue, verstehe ich das ganze sogar :lol: Leider erhalte ich immer wieder die gleiche Fehlermeldung, "Unknown column x.artnr in on clause" egal wie rum ich es versuche.
SQL-Code:
ON x.ArtikelNr = y.ArtikelNr) x
SQL-Code:
In jedem Fall ist x.artnr der Fehler. Desweiteren verstehe ich nicht ganz, dass sowohl beim Subselect
ON y.ArtikelNr = x.ArtikelNr) x
SQL-Code:
sowie auch beim
FROM (SELECT SUM(GutStueck) as menge
FROM tagesproduktion GROUP BY ArtikelNr) x
SQL-Code:
ein x am Ende steht. Vielleicht kann mir das ja jemand erklären.
ON x.ArtikelNr = y.ArtikelNr) x
|
Re: Select mit SubSelect summieren
Hallo uwewo,
ok ich versuche mal etwas Klarheit hier reinzubringen. Wenn man schreibt...
SQL-Code:
dann gibt man der tabelle einen Prefix (x) über den man dann auf die Spalten der Tabelle zugreifen kann.
SELECT x.spalte
FROM tabelle x Man könnte auch den Prefix weglassen und einfach den vollständigen Tabellennamen schreiben.
SQL-Code:
Das ist mir allerdings zu umständlich.
SELECT tabelle.spalte
FROM tabelle Diese Prefix bzw. Tabellenangabe beim Spaltennamen ist allerdings nur dann nötig wenn man mehrere Tabellen auf einer Ebene hat, die die selben Spaltennamen haben. Damit man eben die Spalte die man meint eindeutig angeben kann. Wenn man jetzt eine Unterabfrage anstatt einer realen Tabelle nimmt, verhält es sich ähnlich. Ich muss auf den Dateninhalt zugreifen können. Bei einer realen Tabelle gibt es schon einen Namen (den Tabellennamen) diesen kann ich auch durch einen Prefix ersetzen. Bei einer Unterabfrage ist diese Namenvergabe ein muss, da die Unterabfrage natürlich keinen Namen hat. Deshalb muss hier immer ein Prefix angegeben werden.
SQL-Code:
Das X nehme ich meist aus reiner Faulheit.
SELECT *
FROM (SELECT * FROM tabelle) x Schauen wir uns jetzt die innerste Abfrage an...
SQL-Code:
da in deiner Produkt-Tabelle ein Produkt mehrfach vorkommen kann (nur mal nebenbei: das DB-Design ist nicht gerade elegant) fasse ich hier alle Artikel zusammen und bilde aus den Einzelsummen eine Gesamtsumme pro Artikel.
SELECT artnr, SUM(menge) menge
FROM oee_produktion GROUP BY artnr Dieses Ergebnis nehme ich und verarbeite es weiter...
SQL-Code:
hier wird jetzt die Stückliste zu jedem Artikel hinzugejoint und Mengen multipliziert.
SELECT teilnr, x.menge * y.menge AS multiplikant
FROM (SELECT artnr, SUM(menge) menge FROM oee_produktion GROUP BY artnr) x INNER JOIN oee_stcklist y ON x.artnr = y.artnr Aus Faulheit habe ich meine beiden Ergebnismengen X und Y genannt. Dieses Ergebnis nehme ich und verarbeite es wieder weiter...
SQL-Code:
da ich die oben erstellte Abfrage in die neue einbette kann ich einfach wieder den gleichen Prefix nehmen, weil es eine neue Ebene ist. Auf einer Ebene kann natürlich jeder Prefix nur einmal vorkommen. Da ich hier aber eine neue Ebene aufmache kann ich einfach wieder mit X weiter machen. Man kann auch jeden anderen Prefix nehmen. Also zum Beispiel so...
SELECT teilnr, SUM(multiplikant) summe
FROM (SELECT teilnr, x.menge * y.menge AS multiplikant FROM (SELECT artnr, SUM(menge) menge FROM oee_produktion GROUP BY artnr) x INNER JOIN oee_stcklist y ON x.artnr = y.artnr) x GROUP BY teilnr
SQL-Code:
Das Kind muss nur einen Namen bekommen.
SELECT teilnr, SUM(multiplikant) summe
FROM (SELECT teilnr, x.menge * y.menge AS multiplikant FROM (SELECT artnr, SUM(menge) menge FROM oee_produktion GROUP BY artnr) x INNER JOIN oee_stcklist y ON x.artnr = y.artnr) z GROUP BY teilnr Ich hoffe ich konnte dir das verständlich rüberbringen. Deine Fehlermeldung sagt einfach nur aus, das die Spalte nicht vorhanden ist. Die Spalten heissen vielleicht etwas anders in deinen Tabellen, das must du dann anpassen. Probier einfach die einzelnen Abfragen aus und baue sie dann langsam wieder zusammen. Hoffe das hilft dir weiter. Gruss Thorsten |
Re: Select mit SubSelect summieren
Hallo Thorsten,
bis auf Dein lettzes "x" hatte ich auch alles vorher verstanden. Natürlich habe ich auch jedes SELECT einzeln ausprobiert und auch das mit der Namensgebung, wegen doppelt vorhandener Feldbezeichnungen in verschiedenen Tabellen war mir klar. Das man Subselects auf diese Weise Alias-Namen zuweisen kann, war mir allerdings neu und es freut mich immer wieder etwas neues zu lernen. Allerdings bin ich mir zu 100% sicher das die Feldnamen meiner Query, mit denen in den Tabellen übereinstimmen daher mein letztes Posting. Na ja wird wohl doch an MySQL 4.11 liegen. Ich DANKE Dir aber trotzdem für die ganze Mühe die Du dir gemacht hast. Ausserdem habe ich auch wieder etwas dazu gelernt, was man nicht unterschätzen sollte. Schönes Wochenende |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz