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

Problem mit einer Abfrage

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Camelia, 2 April 2013.

  1. Camelia

    Camelia Neuer Benutzer

    Hallo,
    bin ich froh, dass ich mein Problem nicht auf Englisch schildern muss, da bekäme ich Schwierigkeiten :) Ist ein bisschen knifflig, aber ich hoffe, ihr könnt mir helfen. Folgende Situation:

    Ich habe eine Spalte in der kommagetrennte Zahlen stehen, Beispiel:

    Zeile 1: 55, 200, 380
    Zeile 2: 2, 39
    Zeile 3: 3

    Wenn ich versuche die Zeile wiederzugeben, die z.B. die Zahl "3" enthält, werden auch die Zeilen dargestellt, welche "39" und "380" enthalten. Da es eine Zahlenreihe ist, versuche ich die Abfrage einer einzelnen Zahl mit CONTAINS. Mit IN komme ich nicht weiter, da werden nur die Zeilen wiedergegeben, die nur eine Zahl enthalten. Wie kann ich nun eine Zahl in einer Zahlenreihe finden, und zwar nur diese Zahl? Ist das überhaupt möglich?

    Danke im Voraus,
    Camelia
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Du hast also:

    Code:
    test=*# select * from camelia ;
     id |    value
    ----+--------------
      1 | 55, 200, 380
      2 | 2, 39
      3 | 3, 37
    (3 rows)
    
    Damit hast Du nicht nur diese Daten, sondern auch ein Problem, weil Du gegen die Regeln der Normalisierung verstoßen hast.

    Du kannst Deinen String (mehr ist es ja nicht) in ein ARRAY aus INT-Werten wandeln und prüfen, ob in diesem Array der Wert (numerisch!) vorkommt. Zum Beispiel so:

    Code:
    test=*# select id, (string_to_array(value, ', '))::int[] from camelia where (string_to_array(value, ', '))::int[] @> array[3];
     id | string_to_array
    ----+-----------------
      3 | {3,37}
    (1 row)
    
    Wie bei mir üblich, ist das aber mit PostgreSQL gemacht, das nach MySQL zu portieren überlasse ich Dir zur Übung. Einfacher wäre sehr wahrscheinlich, das gleich richtig zu normaliseren.


    Andreas
     
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