【问题标题】:missing FROM-clause entry for table [closed]缺少表的 FROM 子句条目[关闭]
【发布时间】:2014-05-09 05:59:02
【问题描述】:

我正在尝试使用inner join 使用以下查询的视图和表

SELECT 
   AcId, AcName, PldepPer, RepId, CustCatg, HardCode, BlockCust, CrPeriod, CrLimit, 
   BillLimit, Mode, PNotes, gtab82.memno 
FROM
   VCustomer 
INNER JOIN   
   vcustomer AS v1 ON gtab82.memacid = v1.acid 
WHERE (AcGrCode = '204' OR CreDebt = 'True') 
AND Masked = 'false'
ORDER BY AcName

错误是

missing FROM-clause entry for table "gtab82"

【问题讨论】:

  • 呃,是的。您在SELECTON 子句中引用了gtab82,但尚未在FROMJOIN 中指定它。您似乎还试图将vcustomer 加入到自身

标签: sql postgresql


【解决方案1】:
SELECT 
   AcId, AcName, PldepPer, RepId, CustCatg, HardCode, BlockCust, CrPeriod, CrLimit, 
   BillLimit, Mode, PNotes, gtab82.memno 
FROM
   VCustomer AS v1
INNER JOIN   
   gtab82 ON gtab82.memacid = v1.AcId 
WHERE (AcGrCode = '204' OR CreDebt = 'True') 
AND Masked = 'false'
ORDER BY AcName

通常仅当由于连接表中的列名重复且表名很长或当表连接到自身时需要为列添加表名前缀时,才使用表名的别名。在您的情况下,您使用 VCustomer 的别名,但出于不确定的原因仅在 ON 子句中使用它。您可能需要查看代码的这方面。

【讨论】:

  • 这对我来说实际上很有用,因为我的代码中有一个硬编码查询,它是从数据库中的一个视图中选择的,所以别名的问题被混淆了。
  • 我看不出这是如何回答这个问题的,除了一个非常难以注意到的查询更正(将“INNER JOIN vcustomer”更改为“INNER JOIN gtab82”)。
【解决方案2】:

因为 gtab82 表不在您的 FROM 或 JOIN 子句中。在这些情况下,您参考 gtab82 表:gtab82.memno 和 gtab82.memacid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多