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

2 SELECTs in 1 Tabelle

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Gerhardus, 14 März 2016.

  1. Gerhardus

    Gerhardus Benutzer

    Hallo,
    habe folgendes Problem: 2 SELECT's aus 1 Tabelle mit 8 teams, xrunden und Punkten
    möchte ich in einer Abfrage in ein oberes und unteres Play OFF
    teilen. Beide Abfrage funktionieren für sich korrekt. Ich möchte jedoch dies in einer Abfrage (Tabelle) bewerkstelligen.
    Erschwerend ist das ich nur spezielle Runden SELECTe.

    1.SELECT

    SELECT `t_ID_f`, SUM(`punkte`) FROM `resultate`, teams
    WHERE teams.Liga='A'
    AND teams.PlayOff=1
    AND resultate.runde>7
    AND resultate.t_ID_f=teams.t_id

    OR teams.Liga='A'
    AND teams.PlayOff=1
    AND resultate.runde=-1
    AND resultate.t_ID_f=teams.t_id

    GROUP BY resultate.t_ID_f
    ORDER BY sum(punkte) DESC

    2.SELECT


    SELECT `t_ID_f`, SUM(`punkte`) FROM `resultate`, teams
    WHERE teams.Liga='A'
    AND teams.PlayOff=2
    AND resultate.runde>7
    AND resultate.t_ID_f=teams.t_id

    OR teams.Liga='A'
    AND teams.PlayOff=2
    AND resultate.runde=-1
    AND resultate.t_ID_f=teams.t_id

    GROUP BY resultate.t_ID_f
    ORDER BY sum(punkte) DESC


    1=oberes Play Off für Runde -1 und ab 7 (Runde -1 sind Bonuspunkte)
    2=unteres Play Off für Runde -1 und ab 7

    Habe es mit UNION probiert jedoch Fehlermeldung wegen Group by bekommen.

    Geht das überhaupt sonst muss ich die 2 Abfragen in PHP in eine Tabelle überführen.

    Bitte um einen Hinweis.

    LG Gerhardus
     
  2. akretschmer

    akretschmer Datenbank-Guru

    das geht schon mit UNION, es muss halt syntaktisch richtig sein für den parser.
     
  3. ukulele

    ukulele Datenbank-Guru

    Wenn beide Abfragen für sich genommen gruppiert werden müssen kannst du beide auch in Subselects packen und nur das ORDER BY in den äußeren Select. Beispiel:
    Code:
    SELECT   t1.plz,
         t1.anzahl
    FROM   (
    
    SELECT   plz,
         count(*) AS anzahl
    FROM   adressen
    GROUP BY plzz
    
         ) t1
    UNION ALL
    SELECT   t2.plz,
         t2.anzahl
    FROM   (
    
    SELECT   plz,
         count(*) AS anzahl
    FROM   adressen
    GROUP BY plzz
    
         ) t2
    ORDER BY 1
     
  4. akretschmer

    akretschmer Datenbank-Guru

    wenn man dann noch später sehen will, aus welcher Abfrage welche Zeile kommt kann man auch noch eine weitere Spalte je Select machen, quasi select 'ich kommen von hier' as quelle , .. und select 'ich bin von da' as quelle, ... ..
     
  5. Gerhardus

    Gerhardus Benutzer

    gelöst: ich brauche kein UNION. Es betreffen beide SELECTs dieselbe Tabelle, und die PlayOFF Bedingung kann ich aus den WHERE Bedingungen vorerst weglassen und
    danach mit : order by playOff, order by Sum(..) ergibt mir die gewünschte Tabelle.
    Bin zu kompliziert an die Sache herangegangen.
    Danke an alle für Hinweise.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Mach mal noch aus dem select ... from x, y where ..., also dem implizieten Join, einen sauberen explizieten. Ist später leicher wartbar.
     
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