Problem mit einer Abfrage

Camelia

Neuer Benutzer
Beiträge
1
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
 
Werbung:
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


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
 
Zurück
Oben