gpt4 book ai didi

django - django 中带有额外条件的左外连接

转载 作者:行者123 更新时间:2023-12-03 17:07:00 25 4
gpt4 key购买 nike

我在使用 django queryset+Q 对象执行此 SQL 时遇到问题。

如果没有原始查询,我该怎么做?

SELECT *
FROM Table1 T1
LEFT OUTER JOIN Table2 T2 ON T1.id == T2.fk_id AND (T2.VALUE = 'val1' OR T2.VALUE IS NULL)

最佳答案

我想您可能一直在寻找 Prefetch对象,但这可能在 5 年前不存在。无论如何,这是现在实现它的一种方式。

您需要在两个位置都使用过滤器,以确保获得适当的 T1 和 T2 实例。然后 Prefetch 实际上会做一个额外的查询来拉取所有相关的 T2 实例。不同之处在于,如果有多个 T2 实例,则不会返回重复的 T1 实例。

from django.db.models import Prefetch
t2_filter = Q(t2_set__value__isnull=True) | Q(t2_set__value='val1')
T1.objects.filter(
t2_filter,
t2_set__isnull=False,
).prefetch_related(
Prefetch(
't2_set',
T2.objects.filter(t2_filter),
to_attr='filtered_t2_set',
)
).distinct()

关于django - django 中带有额外条件的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18682065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com