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

WHERE句の複数の条件

    次のようなものを使用できます:

    select * 
    from @Accessories 
    where (@Param = 0)
      or (@Param = 1 and atype = 'HDD') 
    --or (@Param = 1 and itype = 1) , if itype and atype are connected
      or (@Param = 2 and atype != 'HDD')
    option (recompile)
    

    Paramが0の場合、最初の条件は0=0になります。 すべての行に一致するため、すべての行が返されます。 paramが1または2の場合、最初の条件ではそれぞれまたはブランチのみが一致するため、2番目の条件で指定されているものが返されます。

    また、option (recompile) 本当に重要です(マーティンのコメントの記事を参照してください)。実行プランを準備するときにパラメータの実行時の値を使用するようにSQLサーバーに指示するため、基本的に次のようになります。

    • @Param =0の場合、クエリはselect * from @Accessoriesになります。
    • @Param =1の場合、クエリはselect * from @Accessories where atype = 'HDD'になります。
    • @Param =2の場合、クエリはselect * from @Accessories where atype != 'HDD'になります。


    1. JavaのSQL文字列の一重引用符の無効な文字

    2. dbの値を数える

    3. 重複キーでのInnoDBの自動インクリメントを防止します

    4. MySQL外部キー-テーブル間で1対1を強制する方法は?