2016-03-28 3 views
0

У меня есть следующая таблица Orders, с колоннами:ОТБОР Учитывая Подгруппы параметров

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

Что является лучшим способом для запроса базы данных в соответствии с любой комбинацией start_ts, end_ts, worker_id и costumer_id?

Если start_ts опущен, я бы:

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

Если worker_id и costumer_id опущены вместо:

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

Единственный способ, который имеет значение, - это индексы, определенные в столбцах. Для индексов, содержащих более одного поля, поля в предложении where должны быть перечислены в том же порядке, в каком они определены в индексе. Это помогает в производительности, но не является незаконным синтаксисом для использования другого порядка. – jleach

+0

@ jdl134679 Хороший комментарий, хотя это не вопрос, im действительно ищет возможности 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 ny WHERE условия, объединенный используя AND, как вам нравится.

+0

, как вы предлагаете это делать? хранимая процедура? –

+0

@OfekRon, может быть proc с параметрами. Просто передайте null в params, где вы хотите опустить. –

+0

Возможно, мой пример был слишком простым, но что, если вы можете опустить соединение с таблицей, если параметр оммичен? –

Смежные вопросы