Einfach aber unmöglich?

  • Hallo,

    ich hab folgende Situation:

    Table "Bestellungen" mit BestID, ArtikelID, ArtikelAnzahl
    Table "LagerPaletten" mit PalID, ArtikelID, ArtikelAnzahlAufPalette

    Ich will wissen, ob fuer die bestellten Artikel genuegend Anzahl auf den Paletten im Lager vorhanden ist.

    Idealerweise ist das dann sowas wie

    Zitat

    SELECT ArtikelID, sel1.Anzahl, sel2.Anzahl
    FROM (select ArtikelID, sum(ArtikelAnzahl) as Anzahl from Bestellungen group by ArtikelID) sel1
    JOIN (select ArtikelID, sum(ArtikelAnzahlAufPalette) as Anzahl from LagerPaletten group by ArtikelID) sel2
    ON sel1.ArtikelID = sel2.ArtikelID;

    Das Problem ist nur, dass geschachtelte Statements so in SQL nicht funktionieren, ich weiss (das ist nur zur Veranschaulichung).
    Weiteres Problem: ich muss MySQL 4 verwenden (d.h. keine Views?)

    Gibts da eine Lösung wie ich die beiden Aggregate ins selbe Select bekomme?
    Hört sich nämlich ganz einfach an, aber wir haben uns gerade ziemlich lang darueber den Kopf zerbrochen.
    Ich hasse MySQL...:cuss:

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • bei mir ist datenbanksysteme zwar schon eine weile her, aber ich wüsste nicht, dass geschachtelte selects damals nicht funktioniert haben (gut, das war ne oracle datenbank, aber das sollte meines wissens auch in mysql gehen)

  • najo, das Hauptproblem ist hier MySQL... Subqueries gibts erst ab 4.1, Views ab 5 (soweit ich rausgefunden hab), und ich sitz auf einer Version 4.0.irgendwas fest.

    aaaaa ich wünsch mir eine echte Datenbank!!!

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • köpf mich jetzt nicht, wenn ich schwachsinn red, ist wirklich schon länger her, dass ich sql gmacht hab.

    aber funzts nicht so in der art auch?

    select ArtikelID, sum(ArtikelAnzahl), sum(ArtikelAnzahlaufPalette)
    from Bestellungen, Lagerpaletten
    where Bestellungen.ArtikelID = Lagerpaletten.ArtikelID
    group by ArtikelID;

  • So hab ichs mir am Anfang auch gedacht, aber das funkt nicht weil ich sowohl mehrere Bestellungen eines Artikels als auch mehrere Paletten eines Artikels haben kann.

    also z.b.

    Code
    pal1   bananen   100
    pal2   bananen    88
    
    
    best1  bananen  20
    best2  bananen  40

    dann werden alle Paletten mit allen Bestellungen verknüpft, ich hab also

    Code
    100   bananen   20
    100   bananen   40
     88   bananen   20
     88   bananen   40

    und dann wird erst summiert --> falsch.

    Ich bräucht was, wo ich ZUERST summieren und DANN joinen kann. (left/right outer joins helfen da auch nix, weil ich da nur noch mehr Tupel bekomm.)

    Irgendwie weiß ich jetzt, warum ich bisher einen großen Bogen um mysql gemacht hab. (OK, in v.5 ist ja mittlerweile einiges mehr enthalten.)

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

  • Wie wärs wenn du den join machst, aber dann die summe durch die anzahl der paletten (oder so - die genaue Formel kann ich dir jetzt ausm stehgreif nicht sagen) - dadurch wäre z.B. das obere statement 100+100+88+88 / 2 = 188, 20+40+20+40 / 2 = 60 und das wäre ja richtig... da muss man sich halt anschaun wie sich das für mehrere paletten usw entwickelt, aber das sollte gehen weil du mit count usw. die anzahl ohne probleme hinkriegen solltest!

  • also DAS hört sich smart an... coole Idee, danke!
    taucht die Frage auf, ob man die Anzahl der Paletten bzw. Bestellungen auch aus dem einen SQL-Statement auslesen kann...

    -----BEGIN GEEK CODE BLOCK-----
    Version: 3.12
    GAT d-(+) s++: a- C++$>+$ U++>+++ P++>+++ L+++ !E W++>$ !N K? w(--)@ !O !M V? PS+ PE++(-)> Y+ PGP(+) t---(-) !5 X R- tv-(--) b++>$ DI+ D+(++) G(+) e>++++* h-- r++ y++
    ------END GEEK CODE BLOCK------ .

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!