Как найти максимальное значение столбца, используя self join в MySQL? - PullRequest
0 голосов
/ 21 апреля 2020

Вопрос в том, чтобы найти модели принтеров с самой высокой ценой. Набор результатов: модель, цена

И схема БД: Принтер (код, модель, цвет, тип, цена)

Я хочу найти самую высокую цену, используя самосоединение. Запрос написано мной:

select model,price
from printer
where not exists
(
select p2.model,p2.price
    from printer p1, printer p2
    where p2.price<p1.price
)

Подзапрос кажется правильным, поскольку он не включает в себя самый высокий, но весь запрос дает пустую таблицу. Ссылка на вопрос: http://www.sql-ex.ru/learn_exercises.php#answer_ref

1 Ответ

1 голос
/ 21 апреля 2020

Вы неправильно написали свой коррелированный подзапрос. Вам нужно сослаться на таблицу, из которой вы читаете (то есть внешний запрос), а не включать ее снова в подзапрос:

SELECT model, price
FROM printer p1
WHERE NOT EXISTS (SELECT * FROM printer p2 WHERE p2.price > p1.price)

Обратите внимание, что это не самосоединение, это коррелированный подзапрос. Чтобы написать эту функцию с помощью самостоятельного объединения, используйте LEFT JOIN и убедитесь, что значение в таблице объединения равно NULL:

SELECT p1.model, p1.price
FROM printer p1
LEFT JOIN printer p2 ON p2.price > p1.price
WHERE p2.model IS NULL

Обратите внимание, что, как @kmoser указывает в комментариях, Вы можете сделать это проще, используя ORDER BY и LIMIT:

SELECT model, price
FROM printer 
ORDER BY price DESC
LIMIT 1

Демо всех трех запросов к SQLFiddle.

...