которых хотя бы у одного авто совпал VIN?
Сделал двойным join по vehicles, inner для фильтрации, left для вывода всех авто.
Запрос работает, но есть ощущение, что делаю неправильно, может нужно использовать не второй join, а что-то другое?
SELECT u.id, u.name, v.vin, v.make
FROM "users" "u"
INNER JOIN "vehicles" "v1" ON "v1"."user_id" = "u"."id" AND "v1"."vin" ILIKE '%ABC%'
LEFT JOIN "vehicles" "v" ON "v"."user_id" = "u"."id"
А как условие задачи изначально выглядит?
Есть страница пользователей и фильтр по ним, по имени, почте и другим полям, так же у пользователя может быть от одного (обычно) до ~10 авто, нужно сделать еще фильтр по VIN, при этом всегда нужно выводить все машины пользователя, а не только совпавшие.
Так будет работать, но будут выводиться дубли: create table users(user_id int); insert into users(user_id) values(5),(6),(7),(8); create table vehicles(vin char(4), user_id int); insert into vehicles(vin, user_id) values('1ABC',5),('2ABC',5),('BAD',5),('BAD3',6); select u.user_id, v1.vin from users u inner join vehicles v on v.user_id=u.user_id and v.vin like '%ABC%' left join vehicles v1 on v1.user_id = u.user_id;
Обсуждают сегодня