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

Komplexe Abfrage via 2 Tabellen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von uppss, 5 Dezember 2014.

  1. uppss

    uppss Benutzer

    Hallo Liebes Forum Team,
    ich komme einfach nicht weiter, ob das überhaupt möglich ist, weiß ich aber auch nicht. Ich brauch dringend HILFE.
    z.B. 2. Tabelle // Wenn da eine ProdNr stimmt, zeig mir bitte 1-te, 3.,5.,7. Zeile aus der 1. Tabelle

    ProdNr / Fehlerkeys 1/ Fehlerkeys 2/
    123456 / 1,3,5,7 / 2,4,6,9
    654321 / 3,4,,6 / 1,3

    1. Tabelle:
    LaufendeNr. / Irgendwelche Inhalte / irgendwelche Inhalte / ...
    1
    2
    3
    4
    5
    (1..5 als primary key deklariert)

    Ich bedanke mich schon mal im Voraus.
    Daniel
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Verwende bitte Code-Tags und zeige bitte die Definition der Tabellen und was bei select rauskommt. Sind die Fehlerkeys jeder in einer Spalte oder ist das ein String?
    Ich habe das Gefühl, das Du da massive Fehler machst. Aber das wird erst klarer, wenn Du das, was Du hast, exakt darlegst.
     
  3. uppss

    uppss Benutzer

    Ich habe noch keine richtige Tabellen erstellt. Das war nur ein Beispiel.
    Die Frage war, ob ich einen String mit laufenden Nummern und Kommas untersuchen kann, wenn ja, dann wie.
    Leider kann ich keine Tabellen hier darstellen :-(

    Tabelle 2

    HTML:
    <table>
      <tr>
        <th>ProdNr</th>
        <th>Fehlerkeys 1</th>
        <th>Fehlerkeys 2</th>
      </tr>
      <tr>
        <td>123456</td>
        <td>1,3,5,7</td>
        <td>2,4,6,9</td>
      </tr>
      <tr>
        <td>654321</td>
        <td>3,4,6</td>
        <td>1,3</td>
      </tr>
    </table>
    Tabelle 1
    HTML:
    <table>
      <tr>
        <th>LaufendeNr</th>
        <th>Irgendwelche Inhalte</th>
        <th>Irgendwelche Inhalte</th>
      </tr>
      <tr>
        <td>1</td>
        <td>.......</td>
        <td>.......</td>
      </tr>
      <tr>
        <td>2</td>
        <td>........</td>
        <td>.........</td>
      </tr>
    </table>
    Und die Abfrage sollte ungefähr so lauten: zeig mir alle Zeilen aus der 1 Tabelle, wenn 1 und oder 3 im String in der 2. Tabelle vorkommen
     
  4. ukulele

    ukulele Datenbank-Guru

    Du kannst einen String wieder zerlegen, das ist aber sehr mühselig und ein massiver Verstoß gegen die Normalisierung, also ein fehlerhaftes Design. Normalerweise sollte gelten eine Zeile / eine Spalte = ein Wert.

    Wenn du diese Strings vermeiden kannst, tu es. Wenn nicht, ist die Anzahl der Werte immer gleich? Ist die Anzahl der Trennzeichen immer gleich? Gibt es NULL Werte?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Vermeide es! Definitiv!
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Just for Fun dennoch mal 'ne kleine Fingerübung ;-)

    Code:
    test=*# select * from uppss1;
     id | vals
    ----+-------
      1 | 1,3,4
      2 | 2,3
    (2 rows)
    
    Time: 0,184 ms
    test=*# select * from uppss2;
     id | val
    ----+------
      1 | eins
      2 | zwei
      3 | drei
      4 | vier
      5 | fünf
    (5 rows)
    
    Time: 0,197 ms
    test=*# select u1.*, u2.* from uppss1 u1 left join uppss2 u2 on (regexp_split_to_array(vals,',')::int[]) @> array[u2.id];
     id | vals  | id | val
    ----+-------+----+------
      1 | 1,3,4 |  1 | eins
      1 | 1,3,4 |  3 | drei
      1 | 1,3,4 |  4 | vier
      2 | 2,3  |  2 | zwei
      2 | 2,3  |  3 | drei
    (5 rows)
    

    schnell weg ...
     
  7. uppss

    uppss Benutzer

    Vielen Dank, jetzt muss ich ich bisschen nachdenken, wie ich das ganze umsetze...
    Ich werde wahrscheinlich eine Zeile / eine Spalte = ein Wert machen
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Beachte einfach die Regeln der Normalisierung. Und vielleicht prüfst Du auch noch mal, ob die Wahl mit MySQL wirklich eine gute war.
     
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