有如下SQL陳述句:
SELECT COUNT(*)
FROM SP
INNER JOIN EEPP
ON SP.SP_STORE_ID = EEPP_ACCOUNT_PICKUP_STORE_ID
AND SP.SP_COMPANY_GROUP_ID = EEPP.EEPP_COMPANY_GROUP_ID
INNER JOIN SIE
ON EEPP_ACCOUNT_PICKUP_STORE_ID = SIE_STORE_ID
AND EEPP_COLLECT_DATE = SIE_DATE
AND EEPP_COMPANY_GROUP_ID = SIE_COMPANY_GROUP_ID
AND SIE_NO = '01'
INNER JOIN TSM
ON TSM_ID = '0220'
AND TSM_SUB_VALUE =EEPP.EEPP_ECCODE
AND TSM_SUB_VALUE3 =SP.SP_COMPANY_ID
WHERE 1=1
AND SP_ACCOUNTANT = 'SP'
AND SP_COMPANY_ID = '3100'
AND SP_COMPANY_GROUP_ID = '40'
這樣寫法一直執行中,查詢不出結果。
1. 如果吧“3100” 改成”1100“ ,把 ‘40’ 改成'30' 可以執行出結果。
2. 或者注釋條件中(除1=1) 其中任何一行也可執行出結果。不會一直執行中;
3.或者去掉 “ INNER JOIN TSM
ON TSM_ID = '0220'
AND TSM_SUB_VALUE =EEPP.EEPP_ECCODE
AND TSM_SUB_VALUE3 =SP.SP_COMPANY_ID ”這段關聯,也能執行出結果。
以上這種查詢不出結果 是什么原因造成的,謝謝各位幫忙啦!
uj5u.com熱心網友回復:
表很大嗎? 還是什么情況uj5u.com熱心網友回復:
關聯的所有欄位,都需要加上表的別名。uj5u.com熱心網友回復:
表不大,別名欄位加上也沒有?uj5u.com熱心網友回復:
也沒查到有鎖表,這個條件的資料只有143筆記錄。不知ORACEL查詢的機制是什么。難道是表有問題嗎?uj5u.com熱心網友回復:
看下執行計劃呢。。。uj5u.com熱心網友回復:
執行計劃的如下:
uj5u.com熱心網友回復:
可以試下用left join替換inner joinuj5u.com熱心網友回復:
改成LEFT可以出結果,但這樣檢索出來的結果不正確。LEFT JOIN 和 INNER JOIN 查詢的性能有什么差別?uj5u.com熱心網友回復:
在執行的時候看一下等待事件uj5u.com熱心網友回復:
重建SP表就可執行出結果了,難道是表有問題,會造成查詢死鎖嗎?uj5u.com熱心網友回復:
是不是正好有人在修改這張表,一直沒提交?單單查詢是不會鎖表的uj5u.com熱心網友回復:
遇到類似問題, 你這原因查到了么uj5u.com熱心網友回復:
統計資訊問題,執行計劃兩處笛卡爾積連接,重新收集執行計劃 或者禁用笛卡爾積/*+ opt_param('_optimizer_mjc_enabled','false')*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/31382.html
標籤:開發
