Множественное значение между запросами [PostgreSQL] - PullRequest
1 голос
/ 11 августа 2011

У меня есть простой запрос, подобный этому

select * from user where xxx between a and b

, но как, если у меня есть несколько входов, как ххх, ггг, ммм, bbb.

с тем же синтаксисом,

select * from user where xxx,yyy,mmm,bbb between a and b

Я хочу выбрать всех пользователей, которые a и b находятся между xxx, yyy, mmm и bbb.поэтому он вернет всех пользователей, с которыми a и b совпадают, между creteria.

Спасибо

Ответы [ 2 ]

3 голосов
/ 11 августа 2011
SELECT * 
FROM user
WHERE (xxx BETWEEN a and b) 
AND (yyy BETWEEN a and b) 
AND (mmm BETWEEN a and b)  
AND (bbb BETWEEN a and b)

Если вы хотите, чтобы все критерии соответствовали. Если вы хотите, чтобы хотя бы один из них совпадал, используйте OR вместо AND.

0 голосов
/ 11 августа 2011

Я бы создал две дополнительные таблицы для хранения ваших дат:

date_type (date_type_id, date_label)
user_date (user_id, date_type_id, date_value)

Что может быть заполнено таким образом:

date_type (1, 'Sign in')
date_type (2, 'Sign out')
user_date (1, 1, '2010-08-11 02:14:20')
user_date (1, 1, '2010-08-11 02:36:54')
// etc

Затем вам нужно будет присоединиться, чтобы достичь желаемого:

    SELECT *
      FROM user
INNER JOIN user_date
     USING (user_id)
INNER JOIN date_type
     USING (date_type_id)
     WHERE date_value BETWEEN a AND b;
       AND date_type_id IN (1,2) -- if necessary, you can choose which
                                 -- types to check
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...