使用BETWEEN和子查询postgres

时间:2014-10-07 05:53:23

标签: sql postgresql

我需要创建一个查询,以便在一定时间内获得员工的所有出勤。但时间是从不同的表。我需要创建一个类似下面的查询,但我不知道如何?

SELECT * FROM attendance WHERE employeeid = 25 AND attendance_date BETWEEN (SELECT bill_fromdate,bill_todate FROM bill WHERE bill_id = 21487)

我正在使用PostgreSQL 8.4。

2 个答案:

答案 0 :(得分:3)

您可以使用join代替子查询:

SELECT *
FROM   attendance a 
JOIN   bill b ON 
       a.attendance_date BETWEEN b.bill_fromdate AND b.bill_todate 
WHERE  a.employeeid = 25 AND AND b.bill_id = 21487

答案 1 :(得分:2)

使用JOIN(如Mureinik的答案)或使用exists条件的子选择:

SELECT a.* 
FROM attendance a
WHERE a.employeeid = 25 
  AND exists (select 1 
              from bill b
              where b.bill_id = 21487 
                and a.attendance_date BETWEEN b.bill_fromdate AND b.bill_todate)

鉴于您的示例查询,很可能在使用连接或子选择之间没有区别。

但它们具有不同的含义,并且连接可以返回与子选择不同的结果(即更多行)(但在这种情况下我再次怀疑)。