2011-05-31 100 views
1

我们有一个表客户和表汽车。Pl/SQL - oracle 9i

客户表的定义是:卡斯特#,#成交汽车 表定义为:交易#,汽车模型#

车模#可以是日产,丰田或本田。

我们需要了解的是有多少不同的顾客购买了本田车,而不是日产车。可以有多个汽车模型记录#因为客户可以购买2-3本本田或尼桑。 交易#是汽车表中的主键。

这样做最具成本效益的方式是什么?

回答

1

试试这个:

SELECT COUNT(DISTINCT cust#) 
    FROM customer a, car b 
WHERE a.transaction# = b.transaction# 
    AND b.model# = 'HONDA' 
    AND NOT EXISTS 
    (
     SELECT 1 
      FROM customer c, car d 
     WHERE c.transaction# = d.transaction# 
      AND d.model# = 'NISSAN' 
      AND c.cust# = a.cust# 
    ) 
+0

这比使用减号来一个更好的选择? – sandy 2011-06-01 14:21:04

+0

“更好”取决于表中的数据量,表中定义的索引...因此,没有直接的答案。 – Chandu 2011-06-01 20:20:02

1
SELECT COUNT(DISTINCT cust.CUST#) AS COUNT FROM CUSTOMER cust INNER JOIN CAR car ON 
cust.TRANS#=car.TRANS# WHERE CAR_MODEL#='HONDA' 
AND NOT EXISTS 
(SELECT COUNT(1) FROM CUSTOMER inner_cust INNER JOIN CAR inner_car ON 
inner_cust.TRANS#=inner_car.TRANS# 
AND inner_cust.CUST#=inner_car.CUST# WHERE inner_car.CAR_MODEL#='NISSAN')