Announcement

Collapse
No announcement yet.

Welche Artikel haben einen höheren Listenpreis als alle Artikel auf Lagerplatz 7?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Welche Artikel haben einen höheren Listenpreis als alle Artikel auf Lagerplatz 7?

    Hallo liebe Community,

    ich arbeite derzeit die Übungsaufgaben in einem Buch durch.
    Momentan am Abschnitt 'Join'.

    Die aktuelle Frage, welche mit seit einigen Stunden verzweifeln lässt lautet:
    "Welche Artikel haben einen höheren Listenpreis als alle Artikel auf Lagerplatz 7?"

    Alle Attribute sind innerhalb einer Tabelle.

    PS: Eine mögliche Lösung wäre:
    Code:
    SELECT bezeichnung, listenpreis
    FROM artikel 
    WHERE listenpreis > (SELECT SUM(listenpreis) FROM artikel WHERE lagerplatz = '7');
    Jedoch verwende ich kein Join. Der Autor des Buches jedoch sagt, dass jede Aufgabe mit einem Join gelöst werden soll.
    Hmn - habt ihr weitere Ideen?

    Könnt ihr mir weiterhelfen?

    Liebe Grüße

  • #2
    Ja, einen Join verwenden.

    Und wie soll jemand eine Antwort geben, ohne das Datenmodell zu kennen?

    Selbstverständlich kennt jeder dein Buch
    Christian

    Comment


    • #3
      Originally posted by Christian Marquardt View Post
      Ja, einen Join verwenden.

      Und wie soll jemand eine Antwort geben, ohne das Datenmodell zu kennen?

      Selbstverständlich kennt jeder dein Buch
      Alle Attribute sind innerhalb einer Tabelle.

      https://imgur.com/a/kyQba

      Comment


      • #4
        Originally posted by Christian Marquardt
        Und? Wie sollen wir jetzt helfen?
        Wir kennen immer noch nicht das Datenmodell
        Ich verwende kein Join. Der Autor des Buches jedoch sagt, dass jede Aufgabe mit einem Join gelöst werden soll.

        Comment


        • #5
          Dann joine die Tablelle mit sich selbst.
          Christian

          Comment


          • #6
            Originally posted by Christian Marquardt View Post
            Dann joine die Tablelle mit sich selbst.
            Und wie erhalte ich dann die Namen der Artikel die größer sind als die Summe von allen Artikeln auf Lagerplatz 7?

            Code:
            SELECT * FROM (SELECT * FROM artikel) AS a INNER JOIN artikel AS aa ON a.artikel_nr = aa.artikel_nr;

            Comment


            • #7
              In dem Buch ist das vermutlich gerade das Kapitel 'self-join'. Man kann Tabellen mit sich selbst joinen.
              Wenn du die Idee nicht hattest wirst du auch eher keine Lösung finden. Was an der Stelle noch relevant zu wissen ist das man einer Tabelle einen Alias Namen geben kann. Nur dann kann man ja bei einem join mit sich selbst die 2 ~Versionen~ der Tabelle unterscheiden.

              [HIGHLIGHT=SQL]SELECT a1.bezeichnung, a1.listenpreis
              FROM artikel as a1
              INNER JOIN artikel as a2 ON a1.listenpreis > a2.listenpreis
              WHERE a2.lagerplatz = '7'[/HIGHLIGHT]

              Edit : Das mit der Summe also das da mehrere artikel an einem Lagerplatz sein können habe ich übersehen. Dann

              [HIGHLIGHT=SQL]SELECT bezeichnung, listenpreis
              FROM artikel a1
              INNER JOIN (SELECT SUM(listenpreis) as listenpreis FROM artikel WHERE lagerplatz = '7') as a2 ON a1.listenpreis > a2.listenpreis[/HIGHLIGHT]
              Zuletzt editiert von Ralf Jansen; 04.10.2017, 19:32.

              Comment


              • #8
                Hallo Ralf,

                Danke für deine Antwort!
                Leider liefert die Abfrage nicht das gewünschte Ergebnis.

                Ich möchte alle Artikel auflisten, die einzeln teurer sind als die Summe aller Artikel auf Lagerplatz 7 :-)

                Danke für den Hinweis auf Self-join!
                Zuletzt editiert von Christian Marquardt; 04.10.2017, 19:32. Reason: Quote entfernt

                Comment


                • #9
                  Merci!

                  Ich stelle gerade 'meinen' größten Fehler fest.
                  a1.listenpreis > a2.listenpreis - ich habe immer mit a1.listenpreis = a2.listenpreis gearbeitet. Aber das Gleichheitszeichen durch ein Größer- oder Kleinerzeichen zu ersetzen, da wäre ich so spontan nicht gekommen.

                  Vielen Dank!
                  Zuletzt editiert von OtenMoten; 04.10.2017, 19:40. Reason: quote entfernt

                  Comment


                  • #10
                    ANMERKUNG:

                    Aus
                    Code:
                    SELECT bezeichnung, listenpreis
                    FROM artikel a1
                           INNER JOIN (SELECT SUM(listenpreis) AS listenpreis FROM artikel WHERE lagerplatz = '7') AS a2 ON a1.listenpreis > a2.listenpreis
                    mach
                    Code:
                    SELECT bezeichnung, a1.listenpreis
                    FROM artikel a1
                           INNER JOIN (SELECT SUM(listenpreis) AS listenpreis FROM artikel WHERE lagerplatz = '7') AS a2 ON a1.listenpreis > a2.listenpreis

                    Comment


                    • #11
                      Originally posted by OtenMoten View Post
                      ANMERKUNG:

                      Aus
                      Code:
                      SELECT bezeichnung, listenpreis ..
                      mach
                      Code:
                      SELECT bezeichnung, a1.listenpreis ..
                      Das postest Du jetzt nur für den einen zusätzlichen Alias extra?

                      Wenn schon denn schon, lass Dich nicht lumpen und spendiere jedem Feld einen Alias. Gerade bei einem Selfjoin dürfte es naheliegend sein, dass ein reiner Feldname nicht eindeutig ist.

                      Könnte man sich auch grundsätzlich angewöhnen, immer Aliase einzusetzen.
                      Gruß, defo

                      Comment

                      Working...
                      X