如何在不使用CTE到期版本错误的情况下重写MySQL CTE查询?

我的CTE出现错误。我在Amazon RDS上托管数据库。我的计算机(本地主机)上还有另一个示例数据库主机。 CTE在我的本地计算机上可以正常工作。我认为Amazon RDS出了点问题。也许它不支持CTE。有人遇到同样的问题吗?任何想法如何解决此问题,或者如何在没有CTE的情况下重写此查询?对此的任何帮助将不胜感激。

    WITH StoreSku AS
(
    SELECT 
        S.StoreName,RTRIM(LTRIM(LEFT(S.StoreName,4))) 'StoreNumber',P.Sku,P.Description
    FROM simplymac_staging.LocationmasterList S
    CROSS JOIN simplymac_staging.`dbo.Sku` P
    WHERE S.Disabled = 0
),Inventory AS
(
    SELECT 
        I.StoreName,RTRIM(LTRIM(LEFT(I.StoreName,I. ProductName,I.ProductIdentifier,I.UnitCost,SUM(I.Quantity) 'Quantity',I.BinStatus
    FROM simplymac_staging.inventorylistinstores I
    GROUP BY 
          I.ProductIdentifier,I.ProductName,I.BinStatus,I.StoreName,I.UnitCost
)
SELECT 
      P.StoreName,P.Description,CASE WHEN I.BinStatus in ('String_InStock') THEN I.Quantity ELSE 0 END ' In Stock',CASE WHEN I.BinStatus in ('String_TransferIn') THEN I.Quantity ELSE 0 END 'TransferIn',CASE WHEN I.BinStatus in ('String_TransferOut') THEN I.Quantity ELSE 0 END 'TransferOut',CASE WHEN I.BinStatus in ('String_OnOrder') THEN I.Quantity ELSE 0 END 'OnOrder'
FROM StoreSku P
LEFT JOIN  Inventory I ON I.ProductIdentifier = P.ID AND I.StoreNumber = P.StoreNumber

错误

  

错误代码:1064。您的SQL语法有错误;在第1行的'Stores AS(SELECT S.StoreName,RTRIM(LTRIM(LEFT(S.StoreName,4)))'St'附近检查与MySQL服务器版本相对应的手册以使用正确的语法

同样,在没有CTE的情况下重写我的查询的任何帮助将不胜感激。非常感谢yu

wydly443 回答:如何在不使用CTE到期版本错误的情况下重写MySQL CTE查询?

作为一个简单的解决方案:由于两个CTE显然彼此都不相关,因此不涉及递归,并且在主查询中仅从一次选择了每个CTE,那么您可以将它们转换为内联表,即移动它们到FROM子句中,如下所示:

SELECT 
      P.StoreName,P.Description,P.Sku,CASE WHEN I.BinStatus in ('String_InStock') THEN I.Quantity ELSE 0 END ' In Stock',CASE WHEN I.BinStatus in ('String_TransferIn') THEN I.Quantity ELSE 0 END 'TransferIn',CASE WHEN I.BinStatus in ('String_TransferOut') THEN I.Quantity ELSE 0 END 'TransferOut',CASE WHEN I.BinStatus in ('String_OnOrder') THEN I.Quantity ELSE 0 END 'OnOrder'
FROM 
(
    SELECT 
        S.StoreName,RTRIM(LTRIM(LEFT(S.StoreName,4))) 'StoreNumber',P.Description
    FROM simplymac_staging.LocationMasterList S
    CROSS JOIN simplymac_staging.`dbo.Sku` P
    WHERE S.Disabled = 0
) P
LEFT JOIN (
(
    SELECT 
        I.StoreName,RTRIM(LTRIM(LEFT(I.StoreName,I. ProductName,I.ProductIdentifier,I.UnitCost,SUM(I.Quantity) 'Quantity',I.BinStatus
    FROM simplymac_staging.inventorylistinstores I
    GROUP BY 
          I.ProductIdentifier,I.ProductName,I.BinStatus,I.StoreName,I.UnitCost
) I ON I.ProductIdentifier = P.ID AND I.StoreNumber = P.StoreNumber
本文链接:https://www.f2er.com/3164906.html

大家都在问