通过查看下面的2个查询,我假设它们将返回相同的结果集,但相距甚远。为什么带有内部联接的2查询产生这么多记录?我究竟做错了什么?我一直盯着这个看了太久,需要一双新鲜的眼睛才能看到它。
SELECT COUNT(*)
FROM ZCQ Z
WHERE Z.QUOTE_CUSTOMER_ID IN (SELECT CUSTOMER_ID FROM CUST_ORDER)
-- returned 6,646 RECS
SELECT COUNT(*)
FROM ZCQ Z
INNER JOIN CUST_ORDER CO ON zquote_customer_id = co.customer_id
-- returned 4,232,473 RECS
请注意,这些是Oracle 10g表,但DBA没有设置FK或PK。
不,这些通常不会返回相同的结果。
第一个计数ZCQ
中与CUST_ORDER
中的客户匹配的行数。
秒数统计匹配的行总数。如果CUST_ORDER
中有重复的客户,那么将计算所有重复的客户。
您可以使用以下方法获得相同的结果:
SELECT COUNT(DISTINCT z.zquote_customer_id)
FROM ZCQ Z JOIN
CUST_ORDER CO
ON zquote_customer_id = co.customer_id;
但是IN
或EXISTS
可能比删除重复项[[after做比赛更有效。