0

如何在 Django 中执行以下相关的 EXISTS 和 NOT EXISTS?

我不想使用 IN 和 NOT IN。这些与 EXISTS 和 NOT EXISTS 不同。

相关存在:

SELECT *
FROM foo
WHERE EXISTS (
    SELECT 1
    FROM bar
    WHERE foo.baz = bar.baz

)

相关不存在:

SELECT *
FROM foo
WHERE NOT EXISTS (
    SELECT 1
    FROM bar
    WHERE foo.baz = bar.baz

)
4

2 回答 2

0

您可以使用QuerySet-的方法exists()。假如说:

class Foo(models.Model):
    bar = models.ForeignKey(Bar, ..., related_name='foos')

您可以检查是否存在关系:

foo = Foo.objects.get(id=1)
bar = Bar.objects.get(id=1)

bar.foos.exists()   # returns True if not empty else False
foo.bar             # returns related object or None
于 2022-02-13T18:23:56.857 回答
0

您可以使用Exists()子查询来生成您想要的查询。不完全确定您的模型的外观,但以下内容可能与您想要的相似

from django.db.models import Exists, OuterRef

matching_bars = Bar.objects.filter(baz=OuterRef('baz'))
Foo.objects.filter(Exists(matching_bars))

要使用子查询NOT EXISTS前缀Exists~

Foo.objects.filter(~Exists(matching_bars))
于 2022-02-13T18:57:58.200 回答