我被困在一个查询,需要您的帮助和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