django ORM 没办法指定 Subquery 的字段进行 join 吗?

2022-02-17 14:43:20 +08:00
 wuwukai007
select *
from user inner join
         (select login_id from account where created_time >='xxx') t1
         on t1.login_id = user.id; 
2671 次点击
所在节点    Python
5 条回复
krixaar
2022-02-17 15:07:29 +08:00
django 不能 id__in 么
Aganzo
2022-02-17 15:09:22 +08:00
user_ids = Account.objects.filter(created_time__gt='xxx').values_list('login_id',flat=True).distinct()
User.objects.filter(id__in=user_ids)
应该是这个意思吧,queryset 会自动以子查询形式嵌套
riiygh
2022-02-17 15:19:18 +08:00
没有看到你的 model 。假设 account 有外键 user ,可以这样试试:User.objects.filter(account__created_time__gte='xxx').all()
wuwukai007
2022-02-17 16:09:14 +08:00
@Aganzo @riiygh
不是这个意思,我想要做的是 join 一个自己构造出来的子查询,没有外键,就是 join 一个子查询
krixaar
2022-02-17 16:59:51 +08:00
@wuwukai007 #4 2 楼写法等同于
select * from user where id in (select login_id from account where created_time >= 'xxx')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834515

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX