Я понимаю, что для каждого name
в carOwned
вы хотите выбрать автомобиль с наименьшим значением в carValue
.
Это можно устранить, присоединив обе таблицы и добавив условие NOT EXISTS
, обеспечивающее сохранение только записи с наименьшим возможным значением:
SELECT o.*
FROM carsOwned o
INNER JOIN carValue v ON v.car = o.car
WHERE NOT EXISTS (
SELECT 1
FROM carsOwned o1
INNER JOIN carValue v1 ON v1.car = o1.car
WHERE o1.name = o.name AND v1.value < v.value
);
Или в MySQL 8.0 выможно использовать ROW_NUMBER()
:
SELECT name, car
FROM (
SELECT o.*, ROW_NUMBER() OVER(PARTITION BY o.name ORDER BY v.value) rn
FROM carsOwned o
INNER JOIN carValue v ON v.car = o.car
) x
WHERE rn = 1
Демонстрация на DB Fiddle :
| name | car |
| ---- | -------- |
| 1 | honda |
| 2 | honda |
| 3 | acura |
| 4 | mercedes |