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

必要なすべての列が存在し、NULLでない場合にのみデータを返すSQLクエリ

    あなたはexistsを使うことができます 。私はあなたが意図していると思います:

    select t.*
    from t
    where exists (select 1
                  from t t2
                  where t2.id = t.id and t2.type = 'Purchase' and t2.total is not null
                 ) and
          exists (select 1
                  from t t2
                  where t2.id = t.id and t2.type = 'Exchange' and t2.total is not null
                 ) and
          exists (select 1
                  from t t2
                  where t2.id = t.id and t2.type = 'Return' and t2.total is not null
                 );
    

    これを「単純化」する方法はいくつかあります:

    select t.*
    from t
    where 3 = (select count(distinct t2.type)
               from t t2
               where t2.id = t.id and
                     t2.type in ('Purchase', 'Exchange', 'Return') and
                     t2.total is not null
              );
    


    1. トランザクションMySQL

    2. MySQL5.6でのROOTパスワードのリセット

    3. postgresqlのmysql_insert_id代替

    4. PHPでMySQL接続を何度も開くことの意味は何ですか