【问题标题】: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))
    

    【讨论】:

      猜你喜欢
      • 2020-07-19
      • 2011-08-13
      • 2017-11-13
      • 1970-01-01
      • 2021-07-19
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      相关资源
      最近更新 更多