Зачем двойное уточнение в SQL?

Я пишу запрос по заданию: 29. Вывести названия всех марок автомобилей, и если есть автомобили этой марки, то номер и модель.

Часть БД которая используется:

Часть БД которая используется

Если я использую вот такой запрос:

SELECT b."brand", c."number", c."model" 
FROM "brand" b
LEFT JOIN "car" c 
     ON c."id" = (SELECT MIN(c2."id") 
                  FROM "car" c2 
                  WHERE c2."brand_id" = b."id");

То у меня для каждого из брендов возвращается одинаковая информация по автомобилям. Чинится только если я дополнительно к сравнению c.id снова проверяю модель. Почему оно не работает без дополнительной проверки? Оно же в подзапросе выбирает итак минимальный айди?

Использую Oracle.

Примеры проблемы:

Результат запроса С уточнением

SELECT TRIM(b."brand") "Марка", c."number" "Номер", TRIM(c."model") "Модель", c."id" 
FROM "brand" b
LEFT JOIN "car" c 
     ON c."id" = (SELECT MIN(c2."id") 
                  FROM "car" c2 
                  WHERE c2."brand_id" = b."id") 
                    AND c."brand_id" = b."id";

введите сюда описание изображения

Результат запроса БЕЗ уточнения:

SELECT TRIM(b."brand") "Марка", c."number" "Номер", TRIM(c."model") "Модель", c."id" 
FROM "brand" b
LEFT JOIN "car" c 
     ON c."id" = (SELECT MIN(c2."id") 
                  FROM "car" c2 
                  WHERE c2."brand_id" = b."id");

введите сюда описание изображения

Данные таблиц:

Таблица car

Таблица brand

INSERT INTO "brand" ("id", "brand") VALUES (1, 'BMW');
INSERT INTO "brand" ("id", "brand") VALUES (2, 'Hyundai');
INSERT INTO "brand" ("id", "brand") VALUES (3, 'Haval');
INSERT INTO "brand" ("id", "brand") VALUES (4, 'Kia');
INSERT INTO "brand" ("id", "brand") VALUES (5, 'Автоваз');
INSERT INTO "brand" ("id", "brand") VALUES (6, 'Lada');
INSERT INTO "brand" ("id", "brand") VALUES (7, 'Toyota');
INSERT INTO "brand" ("id", "brand") VALUES (8, 'Ford');
INSERT INTO "brand" ("id", "brand") VALUES (9, 'Niva');


-- Добавляю машины

INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (1, 'А394УО', '116', 1, 'X5', 'хэтчбек', 'Корея');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (2, 'О444АТ', '23', 2, 'Elantra', 'седан', 'Германия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (3, 'С916ХВ', '50', 4, 'Sportage', 'седан', 'Россия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (4, 'Р907ХР', '78', 2, 'Elantra', 'универсал', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (5, 'У895НК', '78', 6, 'Granta', 'внедорожник', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (6, 'У631УТ', '50', 6, 'Niva', 'внедорожник', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (7, 'К875ВЕ', '50', 7, 'Camry', 'седан', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (8, 'А131СТ', '50', 8, 'Focus', 'хэтчбек', 'Япония');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (9, 'С752ЕН', '116', 8, 'Mondeo', 'седан', 'Россия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (10, 'А220СН', '116', 2, 'Tucson', 'купе', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (11, 'Н350ТЕ', '78', 4, 'Sportage', 'купе', 'Япония');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (12, 'К342АО', '78', 1, '5 Series', 'купе', 'Корея');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (13, 'К336НУ', '77', 1, '3 Series', 'внедорожник', 'Япония');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (14, 'Р407РМ', '116', 7, 'Corolla', 'седан', 'Германия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (15, 'О387АМ', '50', 1, '5 Series', 'внедорожник', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (16, 'Н266ВР', '23', 1, '3 Series', 'универсал', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (17, 'Н867ХЕ', '50', 6, 'Granta', 'купе', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (18, 'М479СХ', '50', 4, 'Sportage', 'купе', 'Корея');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (19, 'А656АС', '50', 7, 'Corolla', 'внедорожник', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (20, 'К236КК', '50', 7, 'Corolla', 'внедорожник', 'Германия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (21, 'А939РХ', '50', 2, 'Elantra', 'внедорожник', 'Россия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (22, 'Т567СС', '77', 4, 'Ceed', 'универсал', 'Япония');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (23, 'У208ТР', '116', 4, 'Ceed', 'универсал', 'Корея');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (24, 'Т164ВА', '23', 7, 'RAV4', 'седан', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (25, 'Р597ХК', '78', 7, 'Corolla', 'универсал', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (26, 'А318ВХ', '23', 8, 'Focus', 'седан', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (27, 'С198ТУ', '78', 7, 'RAV4', 'седан', 'Россия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (28, 'О109МВ', '116', 7, 'Corolla', 'универсал', 'Германия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (29, 'Е194НК', '23', 8, 'Kuga', 'универсал', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (30, 'А427ХН', '78', 6, 'Vesta', 'универсал', 'США');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (31, 'А844НЕ', '116', 8, 'Mondeo', 'седан', 'Россия');
INSERT INTO "car" ("id", "number", "region", "brand_id", "model", "category", "production") VALUES (32, 'М704МР', '116', 7, 'Corolla', 'седан', 'Германия');

Ответы (1 шт):

Автор решения: geo

А принимаются ответы по типу "я бы сделал, так так как явное лучше неявного?". Если "да", то думаю ваша задача решается более простым способом и более понятным оптимизатору.

select 
    b."brand",
    cc."model",
    cc."number"
from 
    "brand" b left outer join (select 
                                    c."number", 
                                    c."model",
                                    c."brand_id"
                                from 
                                    "car" c
                                where 
                                    c."id" in (select min("id") from "car" group by "brand_id")
                                
                               ) cc on cc."brand_id" = b."id" 
→ Ссылка