Как получить все записи элемента, если он имеет одно конкретное значение

У меня есть модель автомобиля, как показано ниже:

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)
Вернуться на верх