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それを呼び出すまでは a であり、それを SQL 式に適しas_scalar()たものに変えます。ColumnElement

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 に答える