Задать вопрос
EgoRusMarch
@EgoRusMarch
C++ Developer

MySQL. Как правильно написать запрос с подзапросом?

Есть таблица product, в этой таблице 3 поля: maker (производитель), model (модель товара) и type (тип товара).

От меня требуется вывести список производителей, которые производят pc, но не производят laptop.

Вот такой запрос у меня получился:
SELECT DISTINCT maker FROM product
WHERE type LIKE "PC%" AND type <> (
SELECT DISTINCT maker FROM product
WHERE type LIKE "Laptop%");

Ошибка следующая:
ERROR 1242 (21000): Subquery returns more than 1 row
(Ошибка 1242 (21000): Подзапрос возвращает более 1 строки)

Ошибка понятна, но как же её исправить?
  • Вопрос задан
  • 723 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `p1`.`maker`
  FROM `product` AS `p1`
  LEFT `product` AS `p2` ON `p2`.`maker` = `p1`.`maker`
    AND `p1`.`type` LIKE 'PC%' AND `p2`.`type` LIKE 'Laptop%'
  WHERE `p2`.`maker` IS NULL
Ответ написан
Комментировать
qonand
@qonand
Software Engineer
SELECT DISTINCT(maker) FROM product WHERE type LIKE "PC%" AND NOT LIKE "Laptop%"
Ответ написан
EgoRusMarch
@EgoRusMarch Автор вопроса
C++ Developer
SELECT DISTINCT maker FROM product
WHERE type LIKE "PC%" AND maker NOT IN(
SELECT DISTINCT maker FROM product
WHERE type LIKE "Laptop%");
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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