在MySQL中,我试图用一个表上的join进行更新,结果得到一个1093错误。这是我正在使用的代码:

UPDATE fdd_test AS fdd1
INNER JOIN  fdd_test  AS fdd2
ON fdd2.Trade_Date = (
   SELECT MAX(fddsub.Trade_Date)
   FROM fdd_test fddsub
   WHERE fddsub.Trade_Date < fdd1.Trade_Date)
SET fdd1.Prior_Pct_UpDn_Since_Open = fdd2.Pct_UpDn_Since_Open,
      fdd1.Prior_14_Day_MFI = fdd2.14_Day_MFI
WHERE fdd1.Symbol = 'A' ;

我也尝试过使用这种语法,但这会导致编译错误:
UPDATE fdd_test AS fdd1
SET fdd1.Prior_Pct_UpDn_Since_Open = fdd2.Pct_UpDn_Since_Open,
      fdd1.Prior_14_Day_MFI = fdd2.14_Day_MFI
INNER JOIN  fdd_test  AS fdd2
ON fdd2.Trade_Date = (
   SELECT MAX(fddsub.Trade_Date)
   FROM fdd_test fddsub
   WHERE fddsub.Trade_Date < fdd1.Trade_Date)
WHERE fdd1.Symbol = 'A' ;

还应注意,别名也指同一个表。我基本上是试图用表中一行之前的数据更新表中一行的数据(按日期)。
我怎样才能让它工作?

最佳答案

UPDATE fdd_test AS fdd1,  fdd_test  AS fdd2
SET fdd1.Prior_Pct_UpDn_Since_Open = fdd2.Pct_UpDn_Since_Open,
    fdd1.Prior_14_Day_MFI = fdd2.14_Day_MFI
WHERE  fdd2.Trade_Date = (
   SELECT MAX(fddsub.Trade_Date)
   FROM fdd_test fddsub
   WHERE fddsub.Trade_Date < fdd1.Trade_Date) AND fdd1.Symbol = 'A' ;`

09-25 20:36