これは、SQL 2008 の安全だが遅い解決策です。
BEGIN
-- setup
DECLARE @tbl TABLE (
[contentid] INT
,[group] VARCHAR(MAX)
)
INSERT INTO @tbl VALUES
(1, 'c,d')
,(2, 'a,c')
,(3, 'd')
-- send your request as simple xml
DECLARE @param XML
SET @param = '<g>a</g><g>c</g>'
-- query
SELECT DISTINCT contentid
FROM @tbl t
INNER JOIN @param.nodes('/g') AS t2(g)
ON ',' + t.[group] + ',' LIKE '%,' + t2.g.value('.', 'varchar(max)') + ',%'
END
コンマ区切りのリストではなく、XML スニペットとしてクエリを渡すだけです。
グループ名が単一の文字である場合、または名前が互いに文字のサブセットではないことが確実な場合 (つまり、GroupA、GroupAB)、クエリを最適化できます。
ON t.[group] LIKE '%' + t2.g.value('.', 'varchar(max)') + '%'
XML 解析機能のない RDBMS を使用している場合は、文字列を使用してクエリを一時テーブルに分割し、そのように処理する必要があります。
列内でカンマ区切りの値を使用しないでください。[group] 列に含まれる値が 1 つだけで、コンポジット (contentid、group) で UNIQUE 制約を使用してエントリを繰り返した場合は、はるかに優れています。