これは、データを正規化することの重要性のさらに別の例です。
1つの列に複数のデータポイントを保持することは、ほとんどの場合正しい設計ではなく、ほとんどの場合、約99.9999%を意味します。
データベースを正規化できない場合は、次のような回避策を使用できます。
SELECT *
FROM Projects p
WHERE EXISTS (
SELECT Project_ID
FROM Feedback F WHERE ID = 268
AND Project_ID IS NOT NULL
AND ';'+ F.Project_ID +';' LIKE '%;'+ CAST(p.Project_ID as varchar) +';%'
)
IN
は使用できません カンマで区切られた値のリストを想定しているのに対し、セミコロンで区切られた単一の値を指定しようとしているため、演算子。 Project_IDの値がコンマで区切られていても、機能しません。
;
を追加した理由 Project_ID
の両側にあります 両方のテーブルで、このようにLIKE
演算子はtrue
を返します Projects.Project_Id
が見つかった場所 Feedback.Project_Id
内 。 ;
を追加する必要があります Projects.Project_Id
に LIKE
を防ぐため true
を返す 区切られた文字列内の数値と部分的に一致する数値を探している場合。 1; 112; 455を含む文字列で12を検索することを検討してください。検索値(この例では12)に区切り文字を追加せずにLIKE
演算子はtrue
を返します 。