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

У нас есть клиент-стол и вагон-стол.

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

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

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

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


person sandy    schedule 31.05.2011    source источник


Ответы (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#
     )
person Chandu    schedule 31.05.2011
comment
это лучший вариант, чем использование оператора минус? - person sandy; 01.06.2011
comment
Лучше зависит от количества данных в таблицах, индексов, определенных в таблицах... Так что прямого ответа на этот вопрос нет. - person Chandu; 02.06.2011