Expr IN(value,...) in WHERE-Clause

polarbear11

Grünschnabel
Hallo Gemeinde,

ich möchte expr IN in einer WHERE clause wie folgt benutzen:
SELECT *
FROM t1
WHERE Id IN (1,2,3)


alledings in einer etwas mehr flexibleren Form:

SELECT a.*
FROM t1 a, t2 b
WHERE a.Id IN (b.IdList) AND b.ID = 1


Die Spalte b.IdList für b.Id = 1 enthält den Wert '1,2,3' (varchar spalte).

Das soll das gleiche Ergebnis liefern wieSELECT * FROM t1 WHERE Id IN (1,2,3). Tut's aber nicht. Hat jemand eine Idee?

Gruss und Dank
Al
 
Das ist meines Wissens nicht möglich.
Eine Alternative wäre, die Datenbank zu normalisieren, die Assoziation also in einer weiteren Tabelle auszulagern und mit einem Subquery zu arbeiten.
 
hpvw hat gesagt.:
Das ist meines Wissens nicht möglich.
Eine Alternative wäre, die Datenbank zu normalisieren, die Assoziation also in einer weiteren Tabelle auszulagern und mit einem Subquery zu arbeiten.

Vielen Dank für die Antwort,

eine weitere Intersektion geht natürlich immer; bedeutet aber auch höheren Verwaltungaufwand, den ich in meinem speziellen Szenario gut hätte umgehen können, wenn IN die o.a. Syntax unterstützt hätte. Da die Daten nunmal in dieser Form (b.IdList = '1,2,3') vorliegen, dachte ich, es gäbe eine Möglichkeit, evtl. zu casten o.ä., so dass IN damit klarkommt.

Anscheinend ist IN für variable Argumente der o.a. Art nicht ausgelegt!? Oder, weiss sonst jemand noch Rat?

Grüsse
Al
 
IN ist für "Aufzählungen" ausgelegt. Der VARCHAR, den Du übergibst ist das einzige Element, welches Du aufzählst.
Ich habe bei den Zeichenketten-Funktionen keine Funktion gefunden, die einen CHAR splitten kann, daher wird es mit IN wohl nicht gehen.
Du könntest jedoch versuchen Dir einen Vergleich (ohne IN) zu überlegen, bei dem Du mit LOCATE oder einem regulären Ausdruck arbeitest.

Gruß hpvw
 
Zurück