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

IN条件とNOTIN条件を持つ単一のテーブルに対する内部クエリ

    のみを取得するには 13と15は、次のことを行います。

    select user_id
    from my_table
    group by user_id
    having max(case when role_id = 13 then 1 else 0 end) = 1 and  -- has 13
           max(case when role_id = 15 then 1 else 0 end) = 1 and  -- has 15
           max(case when role_id not in (13, 15) then 1 else 0 end) = 0 -- nothing else
    

    これにより、13と15がuser_idセットに含まれていることが確認されます。次に、セットに他に何も含まれていないことを確認します。

    最初は、caseステートメントでhaving句を使用するのは厄介に思えます。ただし、セット内のさまざまな組み合わせについて多くのロジックを表現できます。



    1. SpringJPAでpostgres配列をマッピング中にエラーが発生しました

    2. Oracle PL/SQLシーケンスがオブジェクトコンストラクタで期待どおりにインクリメントしない

    3. vagrantvirtualboxマシンからホストPostgreSQLに接続する方法

    4. 選択されたmysql列挙型のphp関数