FROM子句中的子查询,具有多列结果

时间:2014-03-03 16:20:59

标签: python sql django

我正在寻找一种方法将此查询转换为等效的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。

1 个答案:

答案 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')