Frage von etimarkler, 20

Ist diese SQL Abfrage so korrekt oder ist der zweite JOIN unnötig?

Ich frage mich ob die SQL Anweisung so korrekt ist. Ist der letzte JOIN im zweiten SELECT nötig oder kann ich den JOIN weglassen und die Tabelle Kunde und Rechnung "direkt" miteinander verbinden anhand des Primary und Foreign Key?

    SELECT *
        (SELECT SUM(RgPos_Menge * PgPos_Preis
        FROM Rechnung
        INNER JOIN Rechnungsposition ON Rechnungsposition.RgPos_RgId = Rechnung.Rg_KdId
        INNER JOIN Kunde ON Kunde.Kd_Id = Rechnung.Rg_KdId)
    FROM Kunde

Die Tabelle als Bild im anhang, oder wenn zu klein hier der direktlink:

http://fs5.directupload.net/images/151118/ov75kpm2.png

Das sind keine Hausaufgaben...

Antwort
von bergerle, 20

Also erstmal hoffe ich, dass die Formatierung von gutefrage.net hier was verbockt hat, sollte natürlich ergibt diese quer überhaupt keinen Sinn. Aber auch sonst sieht es so aus, als ob du versuchst, mit einem select einfach alle Ergebnisse eines subselects auszugeben, was völlig unnötig ist. Schreib doch nochmal deine quer so, dass sie richtig angezeigt wird und man sie auch lesen kann (vielleicht auch als links zu sqlfiddle.com), dann kann man dir vielleicht weiterhelfen.

Kommentar von etimarkler ,

Habe es mit deiner angegebenen Seite versucht.

Aber anscheinend haben die Probleme...(Gateway timeout)

Kommentar von etimarkler ,

Habe noch mal ein paar Fehler korrigiert. Hier ist der Link zu SqlFiddle:

http://sqlfiddle.com/#!9/600143/16

Und nur zum Vergleich. Das Ergebnis will ich bekommen nur halt mit einer unterabfrage:

SELECT SUM(RgPos_Menge * RgPos_Preis) As UmsatzGesamt
FROM RechnungPosition
INNER JOIN Rechnung ON Rechnung.Rg_KdId = RechnungPosition.RgPos_RgId
INNER JOIN Kunde ON Kunde.Kd_Id = Rechnung.Rg_KdId
ORDER BY UmsatzGesamt DESC

Zwar ist diese Lösung ebenfalls richtig und ich bin damit zufrieden, aber es wurmt mich, dass ich es nicht anders hinbekomme :D

Kommentar von bergerle ,

ich würde dir gerne weiterhelfen, aber im moment scheint sqlfiddle wirklich ziemlich probleme zu haben. Aber wieso willst du es denn unbedingt mit einem Subselect und nicht einfach mit Joins machen? Außerdem fällt mir in deiner Query auf, dass du in deinem ersten join die rechnungs-id der rechnungsposition mit der kunden-id der rechnung vergleichst, ich denke mal, das ist ein versehen, sinnvoll scheint es jedenfalls nicht

Kommentar von etimarkler ,

Ja genau, dass war ein versehen mit der Kunden-id und der RechnungPosition. Das muss durch Rg_Id ersetzt werden.

Es gibt keinen wirklichen grund. Ich will es gerne hinbekommen weil es möglich ist. Um mehr geht es da nicht. Die Herausforderung spornt mich an :D

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten