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

リスト内のすべてのアイテムに一致する行を選択する2つの方法(T-SQL)

    この記事では、SQL ServerのID(またはその他の値)のリストに基づいて行を選択する2つの方法を紹介します。これは、IDのコンマ区切りリストがあり、それらのIDに一致する行をデータベースに照会する場合に役立ちます。

    次のIDのリストがあるとします。

    1,4,6,8

    そのため、ID列にこれらの値(1、4、6、または8のいずれか)が含まれるレコードをテーブルに照会する必要があります。

    これを行うには2つの方法があります。

    オプション1:IN演算子

    1つのオプションは、INを使用することです クエリ内の演算子を使用して、リストで指定されている行のみを返します。

    SELECT ArtistId, ArtistName
    FROM Artists
    WHERE ArtistId IN (1,4,6,8);
    

    結果:

    ArtistId  ArtistName               
    --------  -------------------------
    1         Iron Maiden              
    4         Buddy Rich               
    6         Jim Reeves               
    8         Maroon 5                 
    

    ご覧のとおり、ArtistIdの値 列はリストと一致します。

    オプション2:STRING_SPLIT()関数

    SQL Server 2016以降、STRING_SPLIT() 関数は、指定された区切り文字を使用して文字式を分割するために使用できます。つまり、これを使用して、カンマ区切りのリストを分割できます。

    前の例と同じデータを使用した例を次に示します。

    SELECT ArtistId, ArtistName
    FROM Artists
    JOIN STRING_SPLIT('1,4,6,8', ',')
    ON value = ArtistId;
    

    結果:

    ArtistId  ArtistName               
    --------  -------------------------
    1         Iron Maiden              
    4         Buddy Rich               
    6         Jim Reeves               
    8         Maroon 5                 
    

    STRING_SPLIT()のメリットの1つ これは、リストの区切り文字として使用されているものを指定できる/(必須)ということです。これは、リストで区切り文字として別​​の文字を使用している場合に便利です。

    これは同じ例ですが、スペースで区切られたリストの場合:

    SELECT ArtistId, ArtistName 
    FROM Artists JOIN STRING_SPLIT('1 4 6 8', ' ') 
    ON value = ArtistId;
    

    結果:

    ArtistId  ArtistName               
    --------  -------------------------
    1         Iron Maiden              
    4         Buddy Rich               
    6         Jim Reeves               
    8         Maroon 5                 
    

    互換性レベル

    STRING_SPLIT()に注意してください 互換性レベルが130以上のデータベースでのみ使用できます。次のステートメントを使用して、データベースの互換性レベルを変更できます。

    ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 130;

    または、SQL Server 2017レベルに上げるには:

    ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 140;

    MyDatabase データベースの名前です。

    SQLServerでデータベースの互換性レベルを確認する方法も参照してください。


    1. pg_restoreの代替-ClusterControlを使用したPostgreSQLバックアップと自動リカバリ

    2. SQL Serverでのvarchar(MAX)とTEXTの使用

    3. RETURNINGを壊さずにPostgresトリガーベースの挿入リダイレクト

    4. LinuxでMySQLデータベースのサイズを確認する方法