【问题标题】:Getting a MySQL error code 1093: "You can't specify target table 'fdd1' for update in FROM clause" in UPDATE获取 MySQL 错误代码 1093:UPDATE 中的“您无法在 FROM 子句中指定目标表 'fdd1' 进行更新”
【发布时间】:2013-06-19 02:02:09
【问题描述】:

在 MySQL 中,我尝试使用表上的连接进行更新,但收到 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' ;

您还应该注意,别名也引用同一个表。我基本上是在尝试用前一行的数据更新表中一行的数据(按日​​期计算)。

我怎样才能让它工作?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:
    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' ;`
    

    【讨论】:

    • jospratik,我已经逐字尝试了您的代码,但仍然收到相同的错误 1093。
    猜你喜欢
    • 2014-01-29
    • 2018-11-15
    • 2018-10-25
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    相关资源
    最近更新 更多