FROM子句中的多列结果子查询
我想把这个查询转换成Django的查询集(queryset)形式:
SELECT a.name, b.num_something FROM table_a a,
(SELECT id, COUNT(id) as num_something FROM table_b
GROUP BY id ORDER BY id DESC LIMIT 10) b
WHERE a.id=b.id;
table_a和table_b的键之间没有外键约束(这个我无法更改,因为不是我负责的代码),但它们的值之间确实有关系。
我已经成功写了一个子查询,能根据我的需求获取结果。现在我不太明白怎么把这个子查询嵌入到主查询里(当然前提是ORM支持这样做)。我现在的查询看起来是这样的:
Something.objects.values_list(
'id').annotate(
num_something=Count('id')).order_by(
'-num_something')[:10]
编辑 我不想使用原始SQL查询的主要原因是,我不确定MySQL会一直作为这个软件使用的数据库。例如,这个查询在Oracle上就无法使用。
1 个回答
0
你有没有想过为什么不使用原始SQL呢?
Something.objects.raw(
'SELECT a.name, b.num_something '
'FROM table_a a, (SELECT id, COUNT(id) as num_something '
' FROM table_b '
' GROUP BY id ORDER BY id DESC LIMIT 10) b '
'WHERE a.id=b.id')