我使用的是SQLAlchemy,在生成的SQL查询中有以下错误。我有一个表relaciones_laborales,它需要连接两个表-- funciones_relacion_laboral与字段RelLabId,puestos与字段PuestoId。
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)) 然后,我用
query = sa.select(...).select_from(join)我得到以下错误:
1054, u"Unknown column 'RELACIONES_LABORALES.PuestoId' in 'on clause'"发布于 2018-02-07 18:41:51
为了清晰起见,让我们使用一个简单一些的例子。给定表x、y和z
x, y, z = [Table(t, metadata, Column('i', Integer))
for t in ['x', 'y', 'z']]语句,如
j = x.join(y.join(z, x.c.i == z.c.i), y.c.i == x.c.i)生成一个SQL表达式对象,该对象编译为
x JOIN (y JOIN z ON x.i = z.i) ON y.i = x.i因为最里面的表达式是先求值的,然后作为参数传递给包围函数调用,依此类推。括号中的联接优先,但此时没有可见的表x。另一方面,如果您改变了形成联接的方式,并将它们链接起来:
j = x.\
join(y, y.c.i == x.c.i).\
join(z, z.c.i == x.c.i)你会得到
x JOIN y ON y.i = x.i JOIN z ON z.i = x.i这大概就是你想要的。所以考虑到这一点:
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)
)https://stackoverflow.com/questions/48668697
复制相似问题