カンマ区切りのリストを使用するのは悪い習慣です。 ドキュメント を読むことができます データベースの正規化について。
カンマ区切りのリストには多くの実用的な問題があります :
- 各値が正しいデータ型であることを確認できません。1,2,3、banana、5を防ぐ方法はありません
- 外部キー制約を使用して値をルックアップテーブルにリンクすることはできません。参照整合性を強制する方法はありません。
- 一意性を強制することはできません:1,2,3,3,3,5を防ぐ方法はありません
- リスト全体を取得せずにリストから値を削除することはできません。
- 文字列列に収まる長さより長くリストを保存することはできません。
- リスト内の特定の値を持つすべてのエンティティを検索するのは困難です。非効率的なテーブルスキャンを使用する必要があります。たとえば、MySQLでは正規表現を使用する必要がある場合があります。
idlist REGEXP '[[:<:]]2[[:>:]]'
- リスト内の要素を数えたり、その他の集計クエリを実行したりするのは困難です。
- 値を参照するルックアップテーブルに結合するのは困難です。
- ソートされた順序でリストを取得するのは難しい。
- 整数を文字列として格納するには、2進整数を格納するスペースの約2倍のスペースが必要です。カンマ文字が占めるスペースは言うまでもありません。
ただし、いずれにせよ必要な場合は、次のようなものを使用できます。
SELECT FilmID,
FilmName,
Id = REPLACE(
(
SELECT DateShown AS [data()]
FROM YourTable
WHERE FilmID = a.FilmID
ORDER BY FilmName FOR XML PATH('')), ' ', ','
)
FROM YourTable a
WHERE FilmName IS NOT NULL
GROUP BY FilmID, FilmName