1
我們有一個表客戶和表汽車。Pl/SQL - oracle 9i
客戶表的定義是:卡斯特#,#成交汽車 表定義爲:交易#,汽車模型#
車模#可以是日產,豐田或本田。
我們需要了解的是有多少不同的顧客購買了本田車,而不是日產車。可以有多個汽車模型記錄#因爲客戶可以購買2-3本本田或尼桑。 交易#是汽車表中的主鍵。
這樣做最具成本效益的方式是什麼?
我們有一個表客戶和表汽車。Pl/SQL - oracle 9i
客戶表的定義是:卡斯特#,#成交汽車 表定義爲:交易#,汽車模型#
車模#可以是日產,豐田或本田。
我們需要了解的是有多少不同的顧客購買了本田車,而不是日產車。可以有多個汽車模型記錄#因爲客戶可以購買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')
這比使用減號來一個更好的選擇? – sandy 2011-06-01 14:21:04
「更好」取決於表中的數據量,表中定義的索引...因此,沒有直接的答案。 – Chandu 2011-06-01 20:20:02