0

次の質問「コンマ区切りデータ列の結合」に似たシナリオがあります。しかし、この質問は、テーブル T1 から選択する必要があるものとは異なります。

参照フィドル

CREATE TABLE T1  ([col1] varchar(2), [col2] varchar(5));

INSERT INTO T1  ([col1], [col2], [col3])
VALUES
    ('C1', 'john',8),
    ('C2', 'alex',10),
    ('C3', 'piers',10),
    ('C4', 'sara',10);

CREATE TABLE T2  ([col1] varchar(2), [col2] varchar(8));

INSERT INTO T2  ([col1], [col2] , [col3])
VALUES
    ('R1', 'C1,C4',10),
    (NULL, 'C3,C2,C5',10),
    ('R3', 'C5,C1,C4',8);

最終結果では、テーブル T1 から値を選択する必要があり、テーブル T2 に対応する null 以外の値があるかどうかを示すフラグが必要です。[col3]加入する際にも検討が必要です。

期待される結果

--- ジョン、はい --- (「R3」が存在するため)

--- アレックス、いいえ ---

--- 桟橋、いいえ ---

--- サラ、はい --- (「R1」が存在するため)

質問

Oracle 8i でこのクエリを記述する最良の方法は何ですか?

4

2 に答える 2

1

このクエリは問題なく動作するはずです ( fiddle ):

SELECT col2,
       DECODE((SELECT COUNT(1)
               FROM T2
               WHERE T1.col3 = T2.col3
                     AND T2.col1 IS NOT NULL
                     AND T2.col2 LIKE '%' || T1.col1 || '%'),
              0, 'NO', 'YES')
FROM T1

私はSQL Serverにあまり詳しくありませんが、次のようなものがそこで機能するはずです:

SELECT COL2,
       CASE WHEN (SELECT COUNT(1)
        FROM T2
        WHERE T2.COL1 IS NOT NULL
          AND T2.COL2 LIKE '%' + T1.COL1 + '%'
          AND T1.COL3 = T2.COL3) > 0
       THEN 'YES'
       ELSE 'NO' END
FROM T1

より正確な一致を取得するには、文字列比較句にコンマと完全一致を追加するだけです。例えば:

SELECT col2,
       DECODE((SELECT COUNT(1)
               FROM T2
               WHERE T1.col3 = T2.col3
                     AND T2.col1 IS NOT NULL
                     AND (T2.col2 LIKE '%,' || T1.col1 || ',%'
                          OR T1.col1 = T2.col2)),
              0, 'NO', 'YES')
FROM T1
于 2014-02-17T12:40:50.480 に答える