以下のSQLは、私が解決しようとしている問題を概念的に再現しています。 NOT IN句を渡すにもかかわらず、3つのレコードがすべて返されます。区切り文字列をNOT IN節に渡す
SELECT * FROM (
SELECT 'JACK' AS VALUE FROM DUAL
UNION
SELECT 'JOHN' AS VALUE FROM DUAL
UNION
SELECT 'BOB' AS VALUE FROM DUAL
) WHERE VALUE NOT IN (SELECT 'BOB,JOHN' FROM DUAL);
私はデータセットからレコードを除外する基準として使用する区切り文字列を保持するテーブルを持っています。しかし、私が持っている問題は、返された文字列が区切られた項目に分解されないということです。私は、上記のに変換したい:
SELECT * FROM (
SELECT 'JACK' AS VALUE FROM DUAL
UNION
SELECT 'JOHN' AS VALUE FROM DUAL
UNION
SELECT 'BOB' AS VALUE FROM DUAL
) WHERE VALUE NOT IN ('BOB','JOHN');
https://asktom.oracle.com/pls/asktom/f?p=100:11::::P11_QUESTION_ID:210612357425 – OldProgrammer
区切られた文字列を保持する表がありますか?どうして?データベースを適切に使用し、文字列を別々に格納した場合、問合せの作成に問題はありません。 –
'' BOB、JOHN''が**単一の文字列値**であるため、3つのレコードがすべて返されます。明らかに「BOB、JOHN」!=「BOB」と「BOB、JOHN」!=「JACK」と「BOB、JOHN」!=「JOHN」。結果は正しいです。問題は、配列やテーブルなど、より適したものではなく、文字列としてコレクションを格納することです。 – APC