缺少的日期,我創建了下面的腳本...的Oracle SQL - 從範圍
SELECT
gr.RESERVATION_NO,
gr.TITLE,
gr.CATNR,
gl.DUEDATE,
gr.CRE_USR,
gl.QTY,
gl.WORK_CENTER_NO,
gl.TEC_CRITERIA,
gr.RESERVE_QTY,
gl.PLANT,
studate.dt
FROM GPS_RESERVATION gr,
(Select first_date + Level-1 dt
From
(
Select trunc(sysdate) first_date,
trunc(sysdate)+60 last_date
from dual
)
Connect By Level <= (last_date - first_date) +1) studate
INNER JOIN GPS_RESERVATION_LOAD gl
ON gl.work_center_no = 'ALIN'
AND gl.duedate = studate.dt
AND gl.plant = 'W'
WHERE gr.RESERVATION_NO = gl.RESERVATION_NO
AND gr.ACTIVE_FLAG = 'Y'
AND gr.reservation_no = '176601'
ORDER BY
gl.DUEDATE
我希望看到所有的日期從SYSDATE到SYSDATE + 60,但是,我只得到其中交貨期存在的日期。
即
我得到...
我的預期......
什麼我做錯了嗎?
感謝您的幫助。
您正在使用內連接而不是左外連接。您還在混合連接樣式,這使得難以跟蹤和調試;爲什麼不在'gr'和''studate'之間使用適當的連接? – 2014-10-28 17:40:55
嗨,我用了一個左外連接並得到了相同的結果。 'gr'和'studate'之間沒有連接,因爲'studate'只能連接到'gr.duedate'?致歉...我對SQL很陌生。 – SMORF 2014-10-28 17:52:13
您正在進行交叉連接,但使用較舊的語法,而不是顯式的ANSI「交叉連接」語法。混合可能會影響連接順序。但即使你讓內連接成爲一個外連接,你也可以用'WHERE gr.RESERVATION_NO = gl.RESERVATION_NO'來隱式地再次進行內連接。這需要成爲外部聯接'on'子句的一部分。 – 2014-10-28 17:56:57