我可以知道为什么以下2个查询返回不同的值。我希望使用LEFT OUTER JOIN作为第一个确切的结果。请帮忙。
select count(a.ADDRESS_ID) from ADDRESS a where a.MEMBER_ID >= 50000000 and a.MEMBER_ID <= 999999999 and a.STATUS='T' and a.LASTCREATE < (current timestamp - 42 days)
and not exists (select 1 from ORDERS o where o.ADDRESS_ID = a.ADDRESS_ID)
and not exists (select 1 from ORDERITEMS oi where oi.ADDRESS_ID = a.ADDRESS_ID or oi.ALLOCADDRESS_ID = a.ADDRESS_ID)
and not exists (select 1 from HD_MEMBER_SUBSCR ms where ms.ADDRESS_ID = a.ADDRESS_ID)
fetch first 800000 rows only for read only with ur;
select count(ADDRESS_ID) FROM ADDRESS
WHERE MEMBER_ID >= 50000000
AND MEMBER_ID < 999999999
AND STATUS = 'T'
AND LASTCREATE < (CURRENT_TIMESTAMP - 42 DAYS)
AND ADDRESS_ID IN (
SELECT a.ADDRESS_ID
FROM ADDRESS a
LEFT OUTER JOIN ORDERS o
ON o.ADDRESS_ID = a.ADDRESS_ID AND o.ADDRESS_ID IS NULL
LEFT OUTER JOIN ORDERITEMS oi
ON oi.ADDRESS_ID = a.ADDRESS_ID AND oi.ADDRESS_ID IS NULL
LEFT OUTER JOIN ORDERITEMS oi2
ON oi2.ALLOCADDRESS_ID = a.ADDRESS_ID AND oi2.ALLOCADDRESS_ID IS NULL
LEFT OUTER JOIN HD_MEMBER_SUBSCR hms
ON hms.ADDRESS_ID = a.ADDRESS_ID AND hms.ADDRESS_ID IS NULL
FETCH FIRST 800000 ROWS ONLY
);
答案 0 :(得分:0)
以下是两个原因:
(1)您正在获取没有order by
子句的有限行数。可以按任何顺序返回行,并且两个查询的前800,000可能不同。
(2)一个或多个联接有多个匹配。这将导致结果集中的重复。