问题描述
|
我们有一个餐桌客户和餐桌车。
客户表定义为:客户编号,交易编号
汽车表定义为:交易编号,汽车型号#
汽车型号可以是日产,丰田或本田。
我们需要找出的是有多少不同的客户购买了本田而不是日产。汽车型号可能有多个记录,因为客户可以购买2-3本田或日产。
交易编号是汽车表中的主键。
这样做最经济有效的方法是什么?
解决方法
尝试这个:
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#
)
, 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\')