我有以下数据:
1, Red, Audi
2, Black, Audi
3, Black, BMW
我希望获得同一辆车同时具有Red
和Black
(并且只有它们)颜色的所有行。
在这种情况下,我希望结果为1和2,因为Audi
既是Red
又是Black
,而不是3,因为没有Red
{{1 }}
如何用django orm实现它?
BMW
答案 0 :(得分:0)
您可以尝试这样做:
from django.db.models import Subquery, OuterRef, Q, Count, IntegerField
color_filter = Q(color="Red") | Q(color="Black")
cars = Car.objects.annotate(
count=Subquery(
Car.objects.filter(color_filter, name=OuterRef('name'))
.values('name')
.annotate(count=Count('name'))
.values('count'), output_field=IntegerField()
)
).filter(color_filter, count=2)
答案 1 :(得分:0)
我不确定这是如何(或者是否)转换为django ORM,但是如果您愿意做原始查询,这应该有效:
SELECT a.*
FROM (SELECT * FROM Car WHERE color='Black') AS a
INNER JOIN (SELECT name FROM Car WHERE color='Red') AS b
ON (a.name=b.name)