2

別の列のどのエントリとも似ていない、ある列のすべてのエントリのリストを取得するクエリを実行する必要があります。つまり、次のようになります。

SELECT DISTINCT columnA
FROM tableA
WHERE columnA NOT LIKE (SELECT columnB FROM tableA)

明らかに、上記のクエリは機能しません。達成しようとしていることを明確にすることを期待してのみ提供しています。例として、私の列に次のものが含まれているとします。

COLUMNA:
ABCD
ABCE
BCDE
BCDF
BCDEF
GHIJ
GHIK

COLUMNB:
ABC
DEF
HIJ

私の望ましい結果は次のとおりです。

BCDE
BCDF
GHIK

テーブルの列には合計 396 個の値があるため、値を手動で入力するだけでは実行できません。さらに、例に示されているように、columnB の値は常に columnA の値の部分文字列になるため、それを念頭に置いてクエリで比較を行う必要もあります。

また、この質問が他の場所で既に回答されている場合はお詫び申し上げます。検索を行いましたが、この特定の要件に対処していると解釈できるものは見つかりませんでした。

新しい情報を追加する* *

したがって、前述のように、2 つの列が異なるテーブルにあるという大きな間違いを犯しました。とはいえ、califax の以下の提案を次のように変更するのは簡単でした。

SELECT DISTINCT COLUMNA FROM TABLE1 T1 LEFT JOIN TABLE2 T2 on T1.COLUMNA LIKE '%' + T2.COLUMNB + '%' AND T2.COLUMNB IS NULL

ただし、COLUMNA からのエントリの完全なリストは引き続き返されます。COLUMNA のエントリの部分文字列である COLUMNB にエントリがあることを確認しました - これがフィルタリングされない理由はありますか?

ありがとう。

4

3 に答える 3

3
SELECT DISTINCT columnA
FROM tableA as O
WHERE not exists ( select 42 from TableA where O.ColumnA like ColumnB )
于 2013-05-21T16:43:00.453 に答える
2

私は次のようなものを試してみます:

select distinct columnA from tableA where columnA not like '%' + columnB + '%'

または criticalfix の発言に従う (正確に何を望んでいるのかわからないため)

SELECT DISTINCT columnA FROM tableA tbA
WHERE not exists ( select 1 from TableA where tbA.ColumnA like '%' + ColumnB '%' )
于 2013-05-21T16:36:40.723 に答える