首页 > 解决方案 > 错误:对表的 FROM 子句条目的引用无效

问题描述

saleco_dw=> SELECT s.cus_code AS Customer_Code, r.reg_name AS Region_Name, (s.sale_price*s.sale_units) AS Total_Sales
FROM dwdaysalesfact s, dwregion r
LEFT JOIN dwcustomer c
ON c.cus_code = s.cus_code
ORDER BY r.reg_name, c.cus_code;

ERROR:  invalid reference to FROM-clause entry for table "s"

LINE 4: ON c.cus_code = s.cus_code
                        ^

HINT:  There is an entry for table "s", but it cannot be referenced from this part of the query.

标签: postgresql

解决方案


您不应该将过时的隐式连接与“现代”(近 30 岁)显式 JOIN 运算符相结合。您的查询是一个很好的例子,为什么隐式连接如此脆弱:您确实忘记了 and 之间的连接dwdaysalesfact 条件dwregion

您的错误的根本原因是连接样式更改的混合 - 它更改了如何查看和使用表(别名)的优先级。

所以重写它以使用正确的 JOIN 和 LEFT JOIN gest 中的引用是有效的:

SELECT s.cus_code AS Customer_Code, 
       r.reg_name AS Region_Name, 
       (s.sale_price*s.sale_units) AS Total_Sales
FROM dwdaysalesfact s
  JOIN dwregion r ON s.??? = r.???
  LEFT JOIN dwcustomer c ON c.cus_code = s.cus_code
ORDER BY r.reg_name, c.cus_code;

推荐阅读