WITH x? ? ? AS (SELECT #{personId} as userID, #{startDate} as startDate, #{endDate} as endDate from dual)? ? ? SELECT (SELECT COUNT (*) thesisCount? ? ? ? ? FROM KY_ACHIEVETHESIS A? ? ? ? ? ? ? ? JOIN KY_ACHIEVEMENT B ON A.THESISID = B.ACHIEVECONTENTID? ? ? ? ? ? ? ? JOIN KY_ACHIEVEPERSON C? ? ? ? ? ? ? ? ? ON C.ACHIEVEITEMID = B.ACHIEVEITEMID, x? ? ? ? ?WHERE B.ACHIEVETYPE = '論文' AND C.PERSONID = x.userID? ? ? ? ? ? ? ?AND A.STATUS = 0? ? ? ? ? ? ? ?AND (A.publishDate >= x.startDate OR x.startDate IS NULL)? ? ? ? ? ? ? ?AND (A.publishDate <= x.endDate OR x.endDate IS NULL)) LWFROM DUAL
3 回答
已采納

HansonQ
TA貢獻223條經驗 獲得超56個贊
where 是在兩個表join完成后,再附上where條件。
而 and 則是在表連接前過濾A表或B表里面哪些記錄符合連接條件,同時會兼顧是left join還是right join。即?
假如是左連接的話,如果左邊表的某條記錄不符合連接條件,那么它不進行連接,但是仍然留在結果集中(此時右邊部分的連接結果為NULL)。?
建議盡量用where來過濾條件,以避免復雜的邏輯考慮。(除非在某些情況下(后接其他sql語句),用and會報錯,才用and,但要考慮是否影響正確結果。)

_朝歌_
TA貢獻10條經驗 獲得超3個贊
在toad to oracle 中執行會報ORA-04044: procedure, function, package, or type is not allowed here。
添加回答
舉報
0/150
提交
取消