我需要创建一个查询,以便在一定时间内获得员工的所有出勤。但时间是从不同的表。我需要创建一个类似下面的查询,但我不知道如何?
SELECT * FROM attendance WHERE employeeid = 25 AND attendance_date BETWEEN (SELECT bill_fromdate,bill_todate FROM bill WHERE bill_id = 21487)
我正在使用PostgreSQL 8.4。
答案 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)
鉴于您的示例查询,很可能在使用连接或子选择之间没有区别。
但它们具有不同的含义,并且连接可以返回与子选择不同的结果(即更多行)(但在这种情况下我再次怀疑)。