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

viele JOINS zusammen fassen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von vodanet, 26 Juni 2018.

  1. vodanet

    vodanet Neuer Benutzer

    Hallo,

    ich habe eine Tabelle mit Daten(id, name, vorname, ....) von Personen(personen) und eine mit Aufgaben(plan).
    Die Tabelle plan hat neben weiteren Feldern die einzelnen Aufgaben als Feldnamen in denen jeweils die id der Person aus der Tabelle personen gespeichert ist.
    Die Aufgaben(-felder) sind im Moment bei 20 und es könnten noch weitere dazu kommen.
    Als Rückgabe meiner SQL Abfrage möchte ich die Namen der Personen (und die weiteren aus der plan Tabelle).

    Im Moment sieht meine Abfrage so aus:

    Code:
    SELECT plan.id, CONCAT(v1.vorname,' ',v1.name) as aufgabe1 ,
                    CONCAT(v2.vorname,' ',v1.name) as aufgabe2,
                    CONCAT(v3.vorname,' ',v1.name) as aufgabe3
    from plan
        LEFT JOIN personen v1 ON v1.id= plan.aufgabe1
        LEFT JOIN personen v2 ON v2.id= plan.aufgabe2
        LEFT JOIN personen v3 ON v3.id= plan.aufgabe3
    Ich habe es hier mal auf 3 reduziert, aber es sind wesentlich mehr.
    Kann man das auch irgendwie eleganter lösen?
    Vielen Dank schon mal für eure Hilfe!
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ja. Wie Du merkst, skaliert Dein Tabellendesign nicht. Statt 20 oder mehr Aufgabenfelder brauchst Du eine weitere Tabelle, wo die Aufgaben drin stehen - je eine Zeile.
     
  3. vodanet

    vodanet Neuer Benutzer

    ... und wie verknüpft?
    Habe ich dann nicht das gleiche Problem wieder? Es haben ja unterschiedliche Personen die jeweiligen Aufgaben. Also nicht die Aufgaben variieren, sondern die Personen.
    Der Gedanke, dass es mal noch mehr Aufgaben werden können ist auch eher langfristig gedacht. Im Normalfall sind es immer gleich viele (20).
     
  4. vodanet

    vodanet Neuer Benutzer

    Ich glaube, ich habe es:

    Code:
    SELECT test_aufgaben.aufgabe, CONCAT (personen.vorname, " ",personen.name) as name, plan.datum_woche, plan.id from plan
            LEFT join test_aufgaben ON test_aufgaben.plan_id=plan.id
            LEFT JOIN personen ON test_aufgaben.verkid = personen.id
    Aber jetzt muss ich alles umstellen :(
    Dennoch vielen Dank für deinen Denkanstoß!!!
     
  5. vodanet

    vodanet Neuer Benutzer

    Einen Tipp, wie ich die Daten nun von der "alten" Tabelle am einfachsten (SQL Anweisung) in die "neue" Tabelle bekomme hast du nicht zufällig, oder?
     
  6. akretschmer

    akretschmer Datenbank-Guru

    20 mal selects mit UNION ALL und das dann wieder INSERT in die neue Tabelle.
     
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