Pl / SQL - оракул 9i - PullRequest
       36

Pl / SQL - оракул 9i

1 голос
/ 01 июня 2011

У нас есть таблица customer и таблица car.

Таблица customer определяется как: cust #, транзакция # таблица car определяется как: транзакция #, модель автомобиля #

модель автомобиля #это может быть либо nissan, либо toyota, либо honda.

нам нужно выяснить, сколько покупателей приобрели honda, но не nissan.для модели автомобиля может быть несколько записей, так как клиент может купить 2-3 хонды или ниссана.Транзакция # является первичным ключом в таблице машин.

Какой самый экономичный способ сделать это?

Ответы [ 2 ]

1 голос
/ 01 июня 2011
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')
1 голос
/ 01 июня 2011

Попробуйте это:

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#
     )
...