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

由于版本错误,如何在不使用CTE的情况下重写MySQL CTE查询?,mysql,mysql-workbench,common-table-expression,Mysql,Mysql Workbench,Common Table Expression,我的CTE出错了。我在Amazon RDS上托管数据库。我的计算机localhost上有另一个示例数据库主机。CTE与我的本地计算机配合良好。我认为亚马逊RDS有问题。也许它不支持CTE。有人经历过同样的问题吗?你知道如何解决这个问题,或者我如何在没有CTE的情况下重写这个查询吗?在此方面的任何帮助都将不胜感激 WITH StoreSku AS ( SELECT S.StoreName , RTRIM(LTRIM(LEFT(S.StoreNam

我的CTE出错了。我在Amazon RDS上托管数据库。我的计算机localhost上有另一个示例数据库主机。CTE与我的本地计算机配合良好。我认为亚马逊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, 4))) 'StoreNumber'
        , 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
    , 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 StoreSku P
LEFT JOIN  Inventory I ON I.ProductIdentifier = P.ID AND I.StoreNumber = P.StoreNumber
错误

错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行选择S.StoreName、RTRIMLTRIMLEFTS.StoreName和4'St'时使用的正确语法


同样,如果没有CTE帮助我重写查询,我将不胜感激。非常感谢yuo,这是一个简单的解决方案:由于两个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.Sku
        , 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, 4))) 'StoreNumber'
        , 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

错误消息与给定查询不匹配。在发布的代码中,它是以StoreSku为单位的,在您提供的错误消息中,它表示Stores为。我只是想确认一下,你得到的是与公布的代码相同的错误。