Как получить все записи элемента, если он имеет одно конкретное значение
У меня есть модель автомобиля, как показано ниже:
id | car_name | test_type
1 | carA | P
2 | carB | Q
3 | carC | Q
4 | carA | Q
Я хочу запросить его таким образом, что если автомобильА имеет 'P' в качестве типа_теста, то результат должен также содержать все записи для автомобиляА.
Ожидаемый результат для автомобиляА:
id | car_name | test_type
1 | carA | P
4 | carA | Q
Есть ли способ сделать это в Django?
Вот необработанный запрос Postgres, который должен работать:
SELECT c1.*
FROM cars c1
WHERE EXISTS (
SELECT 1
FROM cars c2
WHERE c2.car_name = c1.car_name AND
c2.test_type = 'P'
);
Нижеприведенный запрос вернет ожидаемый результат:
select car.* from car left join (select * from car where test_type='P' group by car_name)sub on sub.car_name=car.car_name where sub.id IS NOT NULL
Вы можете выполнить запрос следующим образом :
SELECT id,car_name,test_type from cars where car_name = (SELECT car_name from cars where test_type = 'P');
Вы получите результат следующим образом:
id | car_name | test_type
1 | carA | P
4 | carA | Q
Вот простой запрос:
SELECT *
FROM car
WHERE car_name IN (SELECT car_name
FROM car
WHERE test_type = 'P');
Если вы спрашиваете об использовании Django ORM, вы можете сделать два запроса и получить правильный набор запросов:
qs_car = Car.objects.filter(test_type='P').distinct().values('car_name')
qs_car_with_p = Car.objects.filter(car_name__in=qs_car)