2010-09-30 3 views
1

У меня возникли проблемы с вопросом о домашнем задании. В частности, найдите производителя, который производит (и) ПК быстрее, чем все ноутбуки. Запрос я используюSQL Sub Query Help

SELECT DISTINCT maker 
From Product 
Where model = (SELECT model 
         FROM PC 
         WHERE speed > ALL (SELECT speed 
              FROM Laptop)); 

Однако я получаю ошибку о том, что мой суб-запрос возвращает более одной строки. Это синтаксическая ошибка с моей стороны или моя логика?

+0

Woohoo! Кто-то, кто открыто признается, что хочет помочь с вопросом о домашнем задании! +1 за честность. –

ответ

1

Ваша логика, казалось бы, выключена.

Этот раздел фильтр с использованием подзапроса:

Where model = (SELECT model FROM PC WHERE speed > ALL (SELECT speed FROM Laptop)); 

должен возвращать одну строку для того, чтобы его на работу.

Вы можете попробовать:

Where model IN (SELECT model FROM PC WHERE speed > ALL (SELECT speed FROM Laptop)); 
+1

Большое вам спасибо. Я полностью забыл, что операторы сравнения работают только для одного значения. DOH! Спасибо за помощь, теперь я собираюсь начать домашнее задание PERL. – Pinsickle

0

Try--

SELECT DISTINCT maker 
From Product 
Where model = (SELECT DISTINCT model 
         FROM PC 
         WHERE speed > (SELECT MAX(speed) 
              FROM Laptop)); 
+0

Спасибо за предложение. Однако я хочу сказать, что нам не разрешено использовать max, min, avg и т. Д. Для этой домашней работы – Pinsickle

1

На самом деле вы можете также использовать РЕГИСТРИРУЙТЕСЬ и использованием Присоединяйтесь зависит от того, что вы собираетесь делать.
Например, я хочу, чтобы найти производителя, который производят (ы) ПК быстрее всех ноутбуков и модель этого ПК:

SELECT product.maker , max(product.speed) 
From product join pc on product.model = pc.model 
Group by product.maker 
Having product.speed = max(product.speed) 

Я думаю, что он должен работать!