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.
uj5u.com熱心網友回復:
您不應將過時的隱式連接與“現代”(近 30 歲)顯式 JOIN 運算子結合使用。和您的查詢是一個很好的例子,為什么隱式連接是如此的脆弱:你沒有忘記之間的連接條件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;
uj5u.com熱心網友回復:
ON 只是告訴如何將 r 連接到 c,因此不允許對 s 的參考。我不能告訴你如何解決它,因為我不知道你真正想要發生什么。
但是在同一個 FROM 中組合逗號連接和顯式連接是令人困惑的。
uj5u.com熱心網友回復:
看起來您可能缺少連接或 where 子句來包含您在 FROM 陳述句中別名的 dwregion 表。
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 -- how are you intending to use r?
LEFT JOIN dwcustomer c ON c.cus_code = s.cus_code
ORDER BY r.reg_name, c.cus_code;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/343270.html
標籤:PostgreSQL
