Sie können dies nicht mit einer IN
Bedingung tun, zumindest nicht direkt. Was in der IN
-Bedingung in Klammern steht, sollte eine Liste mehrerer separater Zeichenfolgen sein, die durch Kommata getrennt sind. Was Sie in Ihrer ersten Tabelle (in jeder Zeile) haben, ist eine einzelne Zeichenkette - was darin enthalten ist (die Tatsache, dass es zum Beispiel Kommas enthält) ist völlig irrelevant.
Es gibt drei Möglichkeiten, dies zu tun. Einer ist der beste Rat, um Ihr Datenmodell zu reparieren. Halte nicht mehrere Werte in einem einzigen Feld; Dies ist ein Verstoß gegen die absolute Mindestanforderung für das Design von soliden Tischen, bekannt als "First Normal Form".
Andernfalls könnten Sie die Strings teilen und dann IN
auf die normale Weise verwenden.
Für diese besondere Übung kann es einfacher sein, Bedingungen zu haben, wie
... where ',' || table1.requestedcolor || ',' like '%,' || table2.colorname || ',%'
Die verketteten Kommas sind notwendig Situationen wie Red
zu vermeiden Dark Red
passend usw.
Unabhängig davon, welcher Ansatz wählen Sie (Kurz vor dem richtigen, um Ihre Tabelle zu normalisieren), wird der Code sowohl schwer zu lesen, zu schreiben und zu pflegen als auch ineffizient sein. Es gibt keinen Weg um ihn herum. Das ist der Grund, warum Profis von der ersten Normalform so hartnäckig sind.
Dies ist eine schreckliche Datenbank-Design. Sie sollten erklären, warum Sie ein gefälschtes Design haben - insbesondere, wenn Oracle geschachtelte Tabellen, JSON und XML unterstützt, die ein wenig besser zum Speichern solcher Informationen sind. –
Oder auch nur normale Tabellen :) – BobC