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