@marq

Подзапрос вернул более одного значения, как исправить?

Добрый день, я знаю, что ошибка в том, что эта ошибка будет возникать при сравнении скалярного значения с подзапросом, который возвращает более одного значения, но как ее исправить на этом примере
SELECT DISTINCT model, price
FROM PC
WHERE price = (SELECT price
 FROM Laptop
 );
  • Вопрос задан
  • 831 просмотр
Решения вопроса 1
@MagicMight
no magic quotes
Если нужно вывести все модели PC, цены которых совпадают с некоторыми моделями laptop'ов, то запрос будет такой
SELECT DISTINCT model, price
FROM PC
WHERE price IN (SELECT price
 FROM Laptop
 );
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker
Программист, энтузиаст
Да, вопрос непонятный нифига.
Но чего именно вы хотите?
Вы можете лимитировать количество выдаваемых значений:
SELECT price
FROM Laptop
LIMIT 1

Можно агрегировать получив, скажем, минимальную цену:
SELECT min(price)
FROM Laptop

Или можно сделать join:
SELECT DISTINCT model, price
FROM PC p
JOIN  Laptop l ON l.price = p.price

Но это тупо и бесполезно. Вы, как бы, сопоставляете ноуты с десктопами по цене и показываете рядом...
SELECT DISTINCT p.model, p.price, l.model
FROM PC p
JOIN  Laptop l ON l.price = p.price

Я бы в таком случае не разделял на отдельные таблицы эти товары, а хранил бы в одной и сделал бы джойн с самой сообой. А сравнивал бы в некоторых рамках, иначе вы требуете точного совпадения цены.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы