Django查询:如何使用sql的“union”和“not in”功能
我想知道在Django查询中怎么使用联合(union)和“不在”(not in)这个功能。我找了很久,但没找到任何例子。
SELECT id,address
FROM tbl_nt
WHERE st_id IN (1,2) AND name = 'foo'
UNION (
SELECT d.id,d.addrses
FROM tbl_nt_123 d
WHERE d.name='foo' AND condition_id NOT IN (
SELECT condition_id
FROM tbl_conditions
WHERE version_id = 5
)
)
我试过这个查询,但下半部分没成功。
tbl_nt_123.objects.values_list('id', 'address').exclude(
condition_id=tbl_conditions
).objects.filter(version_id=5).values_list(
'condition_id', flat=True)
)
我该怎么做呢?
请给我推荐一些好的链接或书籍,帮助我理解更高级的Django查询。
谢谢!
2 个回答
0
Django的查询集现在有一个叫做.union()的方法。这个方法可以用来合并多个查询的结果,类似于这样:
tbl_nt.objects.filter(st_id__in=(1, 2), name='foo').union(
tbl_nt.objects.filter(name='foo')
.exclude(condition__in=Condition.objects.filter(version_id=5))
).values_list('id', 'address')
https://docs.djangoproject.com/en/stable/ref/models/querysets/#union
7
你可能只需要加上 __in
这个查找修饰符就可以了:
tbl_nt_123.objects.values_list('id','address').exclude(
condition_id__in=tbl_conditions.objects.filter(version_id=5).values_list('condition_id',flat=True))
至于合并,你可以用 |
这个符号来模拟实现。
union = queryset1 | queryset2