很抱歉,我是Django的新手。所以,我在加入两个表的简单查询时遇到了麻烦。假设我有两个具有一对一关系的表调用“table1”和“table2”: 表1(FIELDA,fieldB,fieldC) 表2(FIELDA,fieldC,fieldZ)
我想获得像
这样的查询结果SELECT T1.fieldA,fieldB,fieldC,fieldZ FROM table1 as T1, table2 as T2 WHERE T1.fieldA=T2.fieldA
我怎样才能在Django中这样做?
提前致谢。
答案 0 :(得分:0)
未经测试的代码,写在火车上的早期通勤发呆中,但这应该有效:
results = Table1Model.objects.filter(fieldA__in = Table2Model.objects.all().values_list('fieldA',flat=True))
这将获得相关Table1ModelObjects的查询集。如果您只想要这些值,请在上面的最后一个括号后面添加:
.values_list('fieldA','fieldB','fieldC','fieldZ', flat=True)
或者,而不是所有这些,请记住,您可以回退到原始SQL:
results = Table1Model.objects.raw("SELECT T1.fieldA,fieldB,fieldC,fieldZ
FROM table1 as T1, table2 as T2
WHERE T1.fieldA=T2.fieldA")
它也会给你回来的对象(假设你正在使用Django 1.2)。如果您只想要值,请从上面添加values_list位,或者查看queryset reference
中的extra()答案 1 :(得分:0)
您可以使用extra()
隐式进行加入:
Table1Model.objects.extra(
tables=['table2'],
where=['table1.fieldA = table2.fieldA']
)