Таблица Car - родительская таблица. Таблица Human - дочерняя (внешний ключ car_id таблицы Human ссылается на car_id таблицы Car).
В таблице Car есть 2 поля: car_id (int) и model (varchar). В model хранятся марки автомобилей. Но эти марки повторяются, т.е. машина к примеру Huinday может иметь id 1 и 5. А два человека из таблицы Human в поле car_id могут иметь значения 1 и 5. То есть у этих разных людей марки автомобиля одинаковый (Huinday), но car_id у них разные.
Я хочу, чтобы теперь этот car_id стал единым и не было путаницы. Т.е. если у человека Huinday, то в его поле будет только car_id=1. Если еще у кого-то Huinday, то и у него тоже будет car_id = 1, а не 5.
Ещё пример:
В таблице Car есть повторяющиеся автомобили: LADA (2 раза)и BMW (3 раза).
В таблице Human люди с id 3005, 3006, 3007 имеют одинаковые марки автомобилей (car_id = 7,4,1, это всё BMW).
А должны иметь car_id единый, т.е. car_id = 1 (это BMW) у id=3005,3006,3007.
То есть из таблицы Car удалить ненужные car_id, если уже этот автомобиль встречался ранее.
Аналогично люди с id = 3002, 3004 с марками LADA. (car_id у LADA = 3 и 6 из таблицы Car)
После выполнения запроса у id=3002 car_id должен остаться 3, а у человека с id=3004 должен стать тоже car_id = 3, а не 6
Запрос для субд Microsoft SQL Server.
Я написал запрос, но он заменяет все car_id на единицу (как минимальный)
Я написал запрос, который должен обновить таблицу Human, изменив там поле car_id на минимальный из своего типа (ну т.е. если это LADA, то минимальный из набора 3, 6).
Однако он заменяет ВСЕ car_id в таблице Human на 1:
update Human set car_id = (
select min(car_id) from Car c where c.Model in (
select Model from Car inner join Human on Human.car_id= Car.car_id));
Обновляем таблицу Human car_id равным минимальному car_id из таблицы Car где модель машины из таблицы Car находится в множестве (выбрать марку машины из таблицы Car, объединив с Human по общему полю car_id).
В итоге выводится таблица со ВСЕМИ марками и их id. А не конкретно одна модель. Он соответственно и берет по порядку самую первую (у которой car_id = 1) и обновляет все поля и ставит им car_id = 1.
Как исправить этот запрос, чтобы он брал конкретно набор из car_id для LADA, BMW?
Если перефразировать, то вопрос заключается в том, как удалить дубликаты из родительской таблицы Car, на которые ссылаются поля дочерней таблицы Human по внешнему ключу car_id. То есть нужно сначала изменить car_id из дочерней таблицы на какой-то один минимальный из соответствующего комплекта, а затем просто удалить ненужные из родительской таблицы. Но у меня вопрос именно как изменить car_id на минимальные.
Надеюсь смог понятно объяснить суть вопроса.