2

我有以下 sqlalchemy 代码:

x = bbc.alias().c
w = bbc.alias().c
select([func.distinct(x.region)]).where(
    select([func.sum(w.population)]).where((w.region == x.region)) > 100000000
)

我希望它产生这个 SQL:

SELECT DISTINCT(x.region)
FROM bbc x
WHERE 100000000 < (
    SELECT SUM(w.population)
    from bbc w
    WHERE w.region = x.region
)

但它给了我这个:

SELECT distinct(bbc_1.region) AS distinct_1 
FROM bbc AS bbc_1 
WHERE 1

不知何故,WHERE 子句正在崩溃,但对于我的生活,我不明白为什么。我对别名做错了吗?

4

1 回答 1

1

正如邮件列表中提到的,一个select()构造是一个FromClause直到你调用as_scalar()它,把它变成一个ColumnElement适合 SQL 表达式的:

x = bbc.alias().c
w = bbc.alias().c
select([func.distinct(x.region)]).where(
    select([func.sum(w.population)]).where(w.region == x.region).as_scalar() > 100000000
)
于 2013-05-08T19:23:42.913 回答