查询之间有多个值[PostgreSQL]

时间:2011-08-11 05:40:32

标签: sql postgresql

我有一个像这样的简单查询

select * from user where xxx between a and b

但如果我有多个输入,如xxx,yyy,mmm,bbb。

与sintax相同,

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

我希望选择所有用户a和b在xxx,yyy,mmm和bbb之间。所以它将返回a和b匹配creteria之间的所有用户。

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

我会创建两个额外的表来存储您的日期:

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

然后你必须做一些JOIN才能达到你想要的效果:

    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