首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ON子句中未知列'ColumnName‘

ON子句中未知列'ColumnName‘
EN

Stack Overflow用户
提问于 2018-02-07 16:27:55
回答 1查看 48关注 0票数 0

我使用的是SQLAlchemy,在生成的SQL查询中有以下错误。我有一个表relaciones_laborales,它需要连接两个表-- funciones_relacion_laboral与字段RelLabIdpuestos与字段PuestoId

代码语言:javascript
复制
join=(relaciones_laborales.join(
    funciones_relacion_laboral.join(
        funciones_asignadas.join(
            sillas.join(
                silla_grupo_materia.join(
                    puestos, (relaciones_laborales.c.PuestoId ==
                              puestos.c.PuestoId)),
                sillas.c.SillaId == silla_grupo_materia.c.SillaId,
                isouter=True),
            sillas.c.SillaId == funciones_asignadas.c.SillaId),
        (funciones_asignadas.c.FuncAsignadaId ==
         funciones_relacion_laboral.c.FuncAsignadaId)),
    relaciones_laborales.c.RelLabId == funciones_relacion_laboral.c.RelLabId)) 

然后,我用

代码语言:javascript
复制
query = sa.select(...).select_from(join)

我得到以下错误:

代码语言:javascript
复制
1054, u"Unknown column 'RELACIONES_LABORALES.PuestoId' in 'on clause'"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-07 18:41:51

为了清晰起见,让我们使用一个简单一些的例子。给定表x、y和z

代码语言:javascript
复制
x, y, z = [Table(t, metadata, Column('i', Integer))
           for t in ['x', 'y', 'z']]

语句,如

代码语言:javascript
复制
j = x.join(y.join(z, x.c.i == z.c.i), y.c.i == x.c.i)

生成一个SQL表达式对象,该对象编译为

代码语言:javascript
复制
x JOIN (y JOIN z ON x.i = z.i) ON y.i = x.i

因为最里面的表达式是先求值的,然后作为参数传递给包围函数调用,依此类推。括号中的联接优先,但此时没有可见的表x。另一方面,如果您改变了形成联接的方式,并将它们链接起来:

代码语言:javascript
复制
j = x.\
    join(y, y.c.i == x.c.i).\
    join(z, z.c.i == x.c.i)

你会得到

代码语言:javascript
复制
x JOIN y ON y.i = x.i JOIN z ON z.i = x.i

这大概就是你想要的。所以考虑到这一点:

代码语言:javascript
复制
join = (
    relaciones_laborales.

    join(funciones_relacion_laboral,
         relaciones_laborales.c.RelLabId ==
         funciones_relacion_laboral.c.RelLabId).

    join(funciones_asignadas,
         funciones_asignadas.c.FuncAsignadaId ==
         funciones_relacion_laboral.c.FuncAsignadaId).

    join(sillas,
         sillas.c.SillaId == funciones_asignadas.c.SillaId).

    join(silla_grupo_materia,
         sillas.c.SillaId == silla_grupo_materia.c.SillaId,
         isouter=True).

    join(puestos,
         relaciones_laborales.c.PuestoId == puestos.c.PuestoId)
)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48668697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档