2017-06-06 99 views
-1

當我在SQL中使用以下查詢時,沒有記錄返回。在sql日期範圍內使用時無法獲取記錄

select distinct e.No from attendance a 
inner join Employee e on a.EmployeeId =e.No 
where e.No not in (select EmployeeId from attendance where AttendanceDate between '2017-05-26 00:00:00' and '2017-06-06 00:00:00') 

但是,當我單日期而不是日期範圍,它工作正常。例如

select distinct e.No from attendance a 
inner join Employee e on a.EmployeeId =e.No 
where e.No not in (select EmployeeId from attendance where AttendanceDate = '2017-06-06 00:00:00') 

有人可以幫我解決這個問題,因爲我必須使用日期範圍,而不是特定的日期。

+0

您確定應該返回該日期範圍內的數據嗎? –

+0

是的,因爲它會在單獨的日期返回記錄 – ASK

+0

您是否嘗試過'2017-05-26'和'2017-06-06'之間? –

回答

0

如果您在where語句中運行select,您會得到任何結果嗎?

嘗試沒有它的時候:

between '2017-05-26' and '2017-06-06' 

什麼日期格式,您使用的?

+0

是的,它返回記錄。並在2017-05-26 00:00:00格式 – ASK

1

我想你混淆了有關查詢的邏輯:

select distinct e.No 
from attendance a 
inner join Employee e 
    on a.EmployeeId = e.No 
where e.No not in 
(
    select EmployeeId from attendance 
    where AttendanceDate between '2017-05-26 00:00:00' and '2017-06-06 00:00:00' 
) 

如果子查詢是返回Employee表中的每個員工號,那麼你還是會回到從沒有記錄查詢。這就是WHERE NOT IN (...)的行爲。我的猜測是單日期查詢似乎是「正常工作」的原因是沒有員工記錄與該日期匹配,因此您的結果集不是空的。

如果您預期的是相反的行爲,那麼也許您應該將WHERE e.No NOT IN更改爲WHERE e.No IN

+0

我必須找到所有那些在這些日子在場的員工,但沒有出席考勤記錄(考勤表中沒有記錄) 所以我的邏輯工作完美在單一日期罰款。我已經用兩張桌子交叉檢查過了。但是當我給出日期範圍時,它只是不返回任何記錄 – ASK

+0

「它只是不返回任何記錄」......然後如我所說,也許你打算做'在哪裏'。你嘗試過嗎? –

+0

實際上沒有..子查詢返回在考勤表中有記錄的所有這些員工ID,所以我只是取消選擇這些ID使用不在和獲取其餘ID在上述日期出席表中沒有記錄 – ASK