0
我不明白我在做什么错。我试图让每一个满足标准的或标准B.select count(ID)where ID IN a or b
select CREATE_WEEK, count (A.PK)
from TABLE1 A
where (A.PK not in (select distinct (B.FK)
from TABLE2 B
where B.CREATE_TIMESTAMP > '01-Jan-2013')
or A.PK in (select A.PK
from (select A.PK, A.CREATE_TIMESTAMP as A_CRT, min (B.CREATE_TIMESTAMP) as FIRST_B
from TABLE1 A, TABLE2 B
where A.PK = B.FK
and A.CREATE_TIMESTAMP > '01-Jan-2013'
and B.CREATE_TIMESTAMP > '01-Jan-2013'
group by A.PK, A.CREATE_TIMESTAMP)
where A_CRT < FIRST_B))
and A.CREATE_TIMESTAMP > '01-Jan-2013'
and CREATE_WEEK >= 2
and THIS_WEEK - CREATE_WEEK >= 1
group by CREATE_WEEK
order by CREATE_WEEK asc
**注ID的每周COUNT:PK在表1 = FK表2中,所以在第一个子查询,我检查是否表1中的PK在表2中以FK存在。一周来自TO_CHAR(TO_DATE(TRUNC(A.CREATE_TIMESTAMP,'IW')),'IW')
当我取出OR并在子查询上运行查询时,结果在1-2秒内返回。但是,当我尝试运行组合查询时,结果不会在20分钟后返回。
我知道我可以单独运行它们,然后将它们汇总在电子表格中,但我宁愿只获取一个数字。
什么关于工会吗? –
哪个数据库和版本的数据库? –
“我知道我可以单独运行它们,然后将它们汇总到电子表格中”:如果任何ID在子查询A中不存在,但在子查询B中,则它们将被计数两次,如果这样做的话。只是因为*你*知道情况并非如此,并不意味着数据库知道。数据库必须检查,以便给你正确的结果,不幸的是,它似乎并没有以最有效的方式这样做。 – hvd