SQL の LIKE 一致に基づいてデータの行を削除しようとすると問題が発生します。SQL Server 2005 を使用しています。
以下のような情報を保持するテーブル(@Containers)があります:-
PMBID DEPT
------ ---------
248057 5,8
249799 5,6,8
249800 5
249941 1,5
249942 1,4,15,16
249943 1,4,5
249945 4
249946 4
249947 4
249966 8,16,23
249967 5,6,8,16
両方の列は文字列です。部門に基づいて行を削除できるクエリが必要です。たとえば、PMBID に部門 1、11、23、または 31 が含まれている場合は、テーブルから削除する必要があります。したがって、このロジック PMBID では...
249941
249942
249943
249966
削除されます。
では、列が文字列であると見なされる SQL でこれを (うまく) 行うにはどうすればよいでしょうか?
などのクエリを書いてきました...
DELETE FROM @Containers WHERE (Dept LIKE '%1%' OR Dept LIKE '%11%' OR Dept LIKE '%23%' OR Dept LIKE '%31%')
明らかに、このステートメントは 15 や 16 などの部門をキャッチするため機能しません。たとえば、PMBID
249967
明示的に 1、11、23、または 31 (またはこれらの組み合わせ) ではないため、含まれるべきではない場合に含まれます。
これは文字列列で可能ですか? デリミタを使用して、クエリを改善することはできますか?
クエリを過度に複雑にするリスクがあるため、ここで停止します。さらに情報が必要な場合はお知らせください。