我被困在一個查詢,需要您的幫助和suggestion.The的情況是:如何寫這個查詢
我有結構的表作爲
JOB_ID,ITEM_ID,NEW_ITEM_ID,STATUS
其中,job_id是主鍵,狀態可以是AC,SB。
現在我想寫一個查詢,只選擇那些STATUS作爲AC的表中沒有ITEM_ID或NEW_ITEM_ID的行中狀態爲SB.I已經寫了查詢但它需要很多的時間,請您幫我寫優化query.This我所寫的
SELECT * FROM (
SELECT JOB_ID,NEW_ITEM_ID,ITEM_ID,STATUS
FROM X1
WHERE STATUS='AC'
AND NEW_ITEM_ID IS NOT NULL
MINUS
(SELECT T1.JOB_ID,T1.NEW_ITEM_ID ,T1.ITEM_ID ,T1.STATUS
FROM (SELECT *
FROM X1
WHERE STATUS IN 'AC'
AND NEW_ITEM_ID IS NOT NULL ) T1
, (SELECT *
FROM X1
WHERE STATUS IN ('PR','SB')
AND NEW_ITEM_ID IS NOT NULL ) T2
WHERE (T2.ITEM_ID IN (T1.ITEM_ID,T1.NEW_ITEM_ID)
OR T2.NEW_ITEM_ID IN (T1.ITEM_ID,T1.NEW_ITEM_ID)
)
AND T1.STATUS!=T2.STATUS
)
) T
編輯
此表將包含數百萬條記錄30M左右說。
你有忘了在標籤中指定`firebird`和`db2` – zerkms 2011-12-13 19:56:56
heh。@Algorithmist:你正在使用哪個DBMS? – 2011-12-13 19:57:54
@Tomalak oracle 11g。 – Algorithmist 2011-12-13 20:01:37