0

Oracleテーブルのコンマ区切りの列を別のテーブルの別のコンマ区切りの列と比較したいと思います。列1のすべての値(コンマ区切りの列内で、順序に関係なく)が列2に含まれている場合、その行を返すことはできません。

例えば ​​-

  1. 列1にはa、b、c、defがあります列2にはa、c、bがあります

    列2のa、c、およびbは、順序に関係なく列1に含まれているため、これを返すことはできません。

  2. 列1にはa、cl、owdがあります列2にはa、owd、ppがあります

    列2には列1に含まれていない'pp'があるため、この行を返す必要があります。

  3. 列1にはvvv、ccc、rrがあります列2にはccc、rrがあります

    この行は返されません。

これをSQLで実行できますか?プロシージャまたは関数を期待していません。

すべての助けをありがとう!

4

1 に答える 1

2

最初:あなたの例はあなたの質問と一致しないと思います.

しかし、あなたの質問に集中してください:列1のすべての値(カンマ区切りの列内で順序に関係なく)が列2に含まれている場合、その行は返されません。

csv を解析してセット (regexp_substr部分) にし、列 2 のセットに列 1 (minus部分)のセットが完全に含まれているかどうかを確認する必要があります。

SELECT *
  FROM csv
 WHERE EXISTS
         (SELECT REGEXP_SUBSTR (col1, '[^,]+', 1, ROWNUM)
            FROM DUAL
           CONNECT BY ROWNUM <= LENGTH (col1) - LENGTH (REPLACE (col1, ',')) + 1
          MINUS
          SELECT REGEXP_SUBSTR (col2, '[^,]+', 1, ROWNUM)
            FROM DUAL
          CONNECT BY ROWNUM <= LENGTH (col2) - LENGTH (REPLACE (col2, ',')) + 1
         )
;

実際の例については、 http://www.sqlfiddle.com/#!4/3cdb3/1を参照してください。

于 2012-11-09T06:56:13.933 に答える