2013-06-21 2 views
2

В MySQL я пытаюсь сделать обновление с соединением на столе, и я получаю 1093. Это код, я использую:Получение кода ошибки MySQL 1093: «Вы не можете указать целевую таблицу« fdd1 »для обновления в предложении FROM» в UPDATE

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' ; 

Вы должны также принять к сведению, что псевдонимы также относятся к той же таблице. Я в основном пытаюсь обновить данные из одной строки таблицы с данными из строки непосредственно перед ней (по дате).

Как я могу заставить это работать?

ответ

0
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' ;` 
+0

jospratik, я пробовал ваш код дословно и по-прежнему получаю ту же ошибку 1093. – Cash