【问题标题】:Filter results if not contained in another column如果不包含在另一列中,则过滤结果
【发布时间】:2013-12-08 14:31:24
【问题描述】:
有没有等效的方法来使用 Django 的 QuerySet API 执行以下 SQL 命令?
select id, childid from mysite_nodetochild
where childid NOT IN (Select "Nodeid" from mysite_nodetochild)
如果可能,我宁愿不使用原始 sql,但我无法使用 Django 的 Queryset 获得干净的工作版本。
【问题讨论】:
标签:
sql
django
django-queryset
【解决方案1】:
试试
nodetochild.objects.exclude(childid=nodetochild.objects.values_list('Nodeid', flat=True)).only('id', 'childid')
这应该或多或少地评估为:
SELECT "mysite_nodetochild"."id", "mysite_nodetochild"."childid" FROM "mysite_nodetochild" WHERE NOT ("mysite_nodetochild"."childid" = (SELECT U0."nodeid" FROM "mysite_nodetochild" U0))
或者,如果您需要IN 条件:
nodetochild.objects.exclude(childid__in=nodetochild.objects.values_list('Nodeid', flat=True)).only('id', 'childid')
评估结果为:
SELECT "mysite_nodetochild"."id", "mysite_nodetochild"."childid" FROM "mysite_nodetochild" WHERE NOT ("mysite_nodetochild"."childid" IN (SELECT U0."nodeid" FROM "mysite_nodetochild" U0))