sql >> データベース >  >> RDS >> Sqlserver

サブクエリMSSQLからIDがセミコロンで区切られた文字列である行を返します

    これは、データを正規化することの重要性のさらに別の例です。
    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_IdLIKEを防ぐため trueを返す 区切られた文字列内の数値と部分的に一致する数値を探している場合。 1; 112; 455を含む文字列で12を検索することを検討してください。検索値(この例では12)に区切り文字を追加せずにLIKE 演算子はtrueを返します 。




    1. 夫婦関係をデータベースに保存する方法

    2. BEGIN/ENDで使用されるバインド変数がクリアされます

    3. PHP MySQLiは、ステートメントを準備し、列のサブセットをフェッチします

    4. SQLで数値列の最大値を見つける方法