我需要創建一個查詢以在一定時限內獲得所有員工的出勤率。但時間來自不同的桌子。我需要創建一個如下所示的查詢,但我不知道如何?在子查詢中使用BETWEEN postgres
SELECT * FROM attendance WHERE employeeid = 25 AND attendance_date BETWEEN (SELECT bill_fromdate,bill_todate FROM bill WHERE bill_id = 21487)
我使用PostgreSQL 8.4。
我需要創建一個查詢以在一定時限內獲得所有員工的出勤率。但時間來自不同的桌子。我需要創建一個如下所示的查詢,但我不知道如何?在子查詢中使用BETWEEN postgres
SELECT * FROM attendance WHERE employeeid = 25 AND attendance_date BETWEEN (SELECT bill_fromdate,bill_todate FROM bill WHERE bill_id = 21487)
我使用PostgreSQL 8.4。
你可以使用一個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
無論是使用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)
鑑於你的示例查詢,很可能在使用連接或子選擇之間沒有區別。
但它們有不同的含義,加入可能返回與子選擇不同的結果(即更多的行)(但是在這種情況下我再次懷疑它)。
JOIN不一定會返回與子查詢解決方案相同的信息。 – 2014-10-07 06:00:24
@a_horse_with_no_name對不起,我不明白你說了什麼。 – 2014-10-07 06:02:59
@Mureinik大約有30K票據和大約1000K的出勤排。所以加入會產生任何性能問題。 – 2014-10-07 06:06:14