Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Ausgabe hat eine Zeile zuviel

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von PJOHM, 24 Mai 2015.

  1. PJOHM

    PJOHM Neuer Benutzer

    Hallo zusammen,

    ich habe eine Frage an euch und hoffe ihr könnt mir helfen.

    Ich habe die Tabellen
    - Kunde: KundenNr
    Name
    Wohnort
    - Artikel: ArtikelNr
    Bezeichnung
    Gewicht
    - Bestellung: BestellNr
    AnzArtikel
    Datum
    ArtikelNr (FK)
    KundenNr (FK)

    Nun sollen Kundenpaare die das selbe bestellt haben ausgegeben werden.
    Die Ausgabe soll folgendermaßen aussehen:
    Kunde1||Name1||Kunde2||Name2||Bezeichnung

    Soweit funktioniert das auch fast :D
    Aber leider werden bei mir immer 2 Zeilen ausgegeben.
    Kunde1||Name1||Kunde2||Name2||Bezeichnung
    Kunde2||Name2||Kunde1||Name1||Bezeichnung


    Das ist mein Code:

    FROM Kunde as K1 JOIN Kunde as K2
    JOIN Bestellung as B1
    JOIN Bestellung as B2
    JOIN Artikel
    On K1.KundenNr!=K2.KundenNr
    AND B1.ArtikelNr=Artikel.ArtikelNr
    AND B2.ArtikelNr=Artikel.ArtikelNr
    AND B2.KundenNr=K2.KundenNr
    AND B1.KundenNr=K1.KundenNr
    WHERE Artikel.ArtikelNr IN(SELECT ArtikelNr
    FROM Bestellung
    GROUP BY K1.KundenNr, K1.Name, K2.KundenNr, K2.Name, Bezeichnung
    having count(ArtikelNr)>=2)

    Danke schon mal ;)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Das kann so nicht funktionieren, da fehlt ja schon mal das Select. Davon abgesehen, was wenn 3 Kunden das bestellt haben, was soll dann in den 2 Kunden-Spalten stehen?

    Mein Ansatz für eine jetzt vereinfachte Tabelle mit den Bestellungen:

    Code:
    test=*# select * from bestellung ;
     kunde | artikel
    -------+---------
      1 |  1
      1 |  2
      2 |  2
      3 |  2
    (4 rows)
    
    Time: 0,136 ms
    test=*# select artikel, array_agg(kunde) from bestellung group by artikel having array_upper(array_Agg(kunde),1) >= 2;
     artikel | array_agg
    ---------+-----------
      2 | {1,2,3}
    (1 row)
    
    Hier hast Du die Artikel, die von mehr als oder 2 Kunden bestellt wurden, mit den Kunden, die das bestellt haben. je nachdem, was Du dann weiter suchst, kann man das dann weiter ausbauen. Ist aber jetzt PostgreSQL.
     
  3. PJOHM

    PJOHM Neuer Benutzer

    Hi, danke für deine Antwort.

    Ja da ist wohl ein Kopierfehler drin, muss natürlich noch SELECT K1.KundenNr, K1.Name, K2.KundenNr, K2.Name, Bezeichnung davor.

    Also das ganze ist für eine Projektarbeit an der Uni, in der Aufgabenstellung steht was von Paaren, daher denke ich, dass zwei ausreichend sind.
    Arbeiten dort mit mySQL. Habe gerade gegoogelt, my SQL kann diese array_agg nicht. Aber anscheinend geht das mit GROUP CONCAT. Mal schauen. Ich teste und berichte dann
     
  4. PJOHM

    PJOHM Neuer Benutzer

    Hat funktioniert. Super. Vielen Dank nochmal für den Hinweis.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden