Postgresql “错误”;“表”的条款条目中缺少;

Postgresql “错误”;“表”的条款条目中缺少;,postgresql,Postgresql,当我使用下面的代码时,我得到了错误“missing FROM子句entry for table zp”。有人知道我如何消除这个错误吗 SELECT SUM(zp.WP*et.GIS) FROM (SELECT DISTINCT zp.HHNR,zp.ZIELPNR FROM mobility.zielpersonen zp FULL OUTER JOIN mobility.etappen et ON zp.HHNR=et.HHNR AND zp.ZIELPNR=et.ZIELPNR ) as e

当我使用下面的代码时,我得到了错误“missing FROM子句entry for table zp”。有人知道我如何消除这个错误吗

SELECT SUM(zp.WP*et.GIS)
FROM (SELECT DISTINCT zp.HHNR,zp.ZIELPNR FROM mobility.zielpersonen zp
FULL OUTER JOIN mobility.etappen et
ON zp.HHNR=et.HHNR AND zp.ZIELPNR=et.ZIELPNR
) as examp

此处不能参考
zp
et
表:

SELECT SUM(zp.WP*et.GIS)
它们只能在子查询范围内引用

只需尝试这样做:

SELECT SUM(examp.WP*examp.GIS)
FROM (SELECT DISTINCT zp.HHNR,zp.ZIELPNR FROM mobility.zielpersonen zp
FULL OUTER JOIN mobility.etappen et
ON zp.HHNR=et.HHNR AND zp.ZIELPNR=et.ZIELPNR
) as examp

此处不能参考
zp
et
表:

SELECT SUM(zp.WP*et.GIS)
它们只能在子查询范围内引用

只需尝试这样做:

SELECT SUM(examp.WP*examp.GIS)
FROM (SELECT DISTINCT zp.HHNR,zp.ZIELPNR FROM mobility.zielpersonen zp
FULL OUTER JOIN mobility.etappen et
ON zp.HHNR=et.HHNR AND zp.ZIELPNR=et.ZIELPNR
) as examp

我想提出这一猜测:

SELECT SUM(exam.WP * exam.GIS)
FROM (SELECT DISTINCT   zp.HHNR,
                        zp.ZIELPNR, 
                        zp.WP, 
                        et.GIS
    FROM mobility.zielpersonen zp
    FULL OUTER JOIN mobility.etappen et
    ON zp.HHNR=et.HHNR AND zp.ZIELPNR=et.ZIELPNR
) as examp
这在不同的查询中包括WP和GIS,可能是您想要的,也可能不是

然而,我认为在这种情况下,最自然的方法是仅按HHNR和ZIELPNR分组,并计算其他值的总和。这可以通过使用以下查询来完成:

SELECT zp.HHNR, zp.ZIELPNR, SUM(zp.WP*et.GIS) AS CalcResult
FROM mobility.zielpersonen zp
LEFT JOIN mobility.etappen et
ON zp.HHNR=et.HHNR 
AND zp.ZIELPNR=et.ZIELPNR
GROUP BY zp.HHNR, zp.ZIELPNR
我将
外部联接
替换为
左联接
,因为我认为计算/分组空值总和没有意义


如果这两个选项都不是您想要的,请澄清问题

我想提出这个猜测:

SELECT SUM(exam.WP * exam.GIS)
FROM (SELECT DISTINCT   zp.HHNR,
                        zp.ZIELPNR, 
                        zp.WP, 
                        et.GIS
    FROM mobility.zielpersonen zp
    FULL OUTER JOIN mobility.etappen et
    ON zp.HHNR=et.HHNR AND zp.ZIELPNR=et.ZIELPNR
) as examp
这在不同的查询中包括WP和GIS,可能是您想要的,也可能不是

然而,我认为在这种情况下,最自然的方法是仅按HHNR和ZIELPNR分组,并计算其他值的总和。这可以通过使用以下查询来完成:

SELECT zp.HHNR, zp.ZIELPNR, SUM(zp.WP*et.GIS) AS CalcResult
FROM mobility.zielpersonen zp
LEFT JOIN mobility.etappen et
ON zp.HHNR=et.HHNR 
AND zp.ZIELPNR=et.ZIELPNR
GROUP BY zp.HHNR, zp.ZIELPNR
我将
外部联接
替换为
左联接
,因为我认为计算/分组空值总和没有意义


如果这两个选项都不是您想要的,请澄清问题

如何消除此错误?不要在其上下文之外使用表名(
zp
&
et
)(它仅在子选择中有效;在外部选择中,您只有
examp.HHNR
examp.ZIELPNR
),但它表示“wp”列不存在。那么我如何使用这些变量呢?因为实际上我想计算具有不同HHNR和ZIELPNR的人的(wp*GIS)之和。如果您想在HHNR和ZIELPNR上使用distinct,但需要zp.wp和et.GIS列,请使用
distinct on(zp.HHNR,zp.ZIELPNR)zp.wp,et.GIS
这是distinct的一个特殊功能,但是如果您需要创建与SQL兼容的查询,您必须使用
GROUP BY
如何消除此错误?不要在其上下文之外使用表名(
zp
&
et
)(它仅在子选择中有效;在外部选择中,您只有
examp.HHNR
examp.ZIELPNR
),但它表示“wp”列不存在。那么我如何使用这些变量呢?因为实际上我想计算具有不同HHNR和ZIELPNR的人的(wp*GIS)之和。如果您想在HHNR和ZIELPNR上使用distinct,但需要zp.wp和et.GIS列,请使用
distinct on(zp.HHNR,zp.ZIELPNR)zp.wp,et.GIS
这是distinct的一个特殊功能,但是如果您需要创建与SQL兼容的查询,您必须使用
groupby
子查询输出中不存在WP列和GIS列,但它会说“WP”列不存在。那么我如何使用这些变量呢?因为实际上我想计算HHNR和ZIELPNR不同的人的(wp*GIS)之和,那么“wp”和“GIS”是什么?wp是来自zp的变量,GIS是来自et的变量。这两个表共享HHHNR和ZIELPNR变量。我想为不同的HHNR和ZIELPNR计算(WP*GIS)。子查询输出中不存在WP和GIS列。但它表示“WP”列不存在。那么我如何使用这些变量呢?因为实际上我想计算HHNR和ZIELPNR不同的人的(wp*GIS)之和,那么“wp”和“GIS”是什么?wp是来自zp的变量,GIS是来自et的变量。这两个表共享HHHNR和ZIELPNR变量。我想计算不同HHNR和ZIELPNR的(WP*GIS)