Pl / SQL - oracle 9i

时间:2011-05-31 22:46:39

标签: sql plsql oracle9i

我们有一个餐桌客户和餐桌车。

客户表定义为:cust#,transaction# 汽车表定义为:交易#,汽车模型#

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

我们需要知道的是有多少不同的客户购买了本田而不是日产。汽车型号可以有多个记录#,因为客户可以购买2-3个本田或日产。 Transaction#是汽车表中的主键。

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

2 个答案:

答案 0 :(得分: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#
     )

答案 1 :(得分: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')