我正在寻找一种方法将此查询转换为等效的Django查询集:
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的键没有通过FK约束连接(它是我无法触摸的东西,而不是我的部分代码),但值表示table_a和table_b之间的关系。
我设法根据我的需要获取子查询检索结果。现在我没有把它嵌入到主查询中(显然,如果ORM允许这样做)。我的实际查询如下:
Something.objects.values_list(
'id').annotate(
num_something=Count('id')).order_by(
'-num_something')[:10]
修改 我不想使用原始SQL查询的原因主要是因为我不确定MySQL是否总是与软件一起使用的数据库。例如,此查询不适用于Oracle。
答案 0 :(得分:0)
您不使用raw的任何理由?
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')