Ваше первое использование EXISTS
кажется правильным, но второе, кажется, отключено.Вы хотите проверить, является ли машина самой старой, но вы проверяете, существует ли машина с тем же MACHINE_ID
(использование MIN
не влияет на результат функции EXISTS
).
Я не администратор БД, но учтите, что в некоторых реализациях подзапросы могут быть дорогостоящими, а в других они могут быть оптимизированы при размещении в функции EXISTS
.Поэтому код stringpoet следует учитывать, когда вам действительно нужен код для запуска ... хотя, как я уже говорил, вам нужно GROUP BY
все остальные поля.
Также обратите внимание, что вам не следует использовать ключевое слово WHERE
дважды, но присоедините свои условия с помощью AND
/ OR
.
Вот мое исправление к вашему и коду строкового поэта:
SELECT M.ID_MACHINE, M.NAME, MIN(M.DATE_BOUGHT)
FROM MACHINES M
WHERE NOT EXISTS (SELECT MA.*
FROM MAINTENANCE MA
WHERE MA.ID_MACHINE = M.ID_MACHINE
AND YEAR(MA.DATE) = 2011)
GROUP BY M.ID_MACHINE, M.NAME