2016-03-28 9 views
0

私は列で、次の表Ordersがあります選択考慮サブセット

  • order_id
  • timestamp
  • worker_id
  • costumer_id
  • start_ts
  • end_ts

start_tsend_tsworker_idcostumer_idの任意の組み合わせに応じてデータベースを照会するための最良の方法は何ですか?

start_tsは、私は希望を省略した場合:

SELECT * 
    FROM Orders 
    WHERE timestamp <= end_ts 
    AND worker_id = <worker_id> 
    AND costumer_id = <costumer_id>; 

worker_idcostumer_idが代わりに省略されている場合:

SELECT * 
    FROM Orders 
    WHERE timestamp BETWEEN start_ts AND end_ts; 
+1

これが重要なのは、列に定義されているインデックスごとです。複数のフィールドを含む索引の場合、where句のフィールドは、索引で定義されている順序と同じ順序でリストされます。これはパフォーマンスに役立ちますが、違う順序を使用するには不正な構文ではありません。 – jleach

+0

@ jdl134679良いコメントですが、これは問題の範囲ではありませんが、実際にこのようなシナリオを扱うためのSQL機能を探しています –

答えて

0

をあなたがそうのような複数の条件を組み合わせることができます。

SELECT * 
    FROM Orders 
    WHERE (timestamp >= <start_ts> or <start_ts> is null) 
    AND (timestamp <= <end_ts> or <end_ts> is null) 
    AND ... ; 

... maとして表されるあなたが好きなようにANDを使用して結合されたny WHERE条件。

+0

これをどうやって提案しますか?ストアドプロシージャ? –

+0

@OfekRonは、パラメータ付きのprocである可能性があります。省略したい場所にnullを渡すだけです。 –

+0

私の例が単純すぎるかもしれませんが、パラメータが省略されている場合は、テーブルとの結合を排除できますか? –

関連する問題