2012-05-23 80 views
9

該查詢給了我在MySQL 57年5月1日的誤差,在53年5月1日,雖然工作:未知表中刪除


    DELETE f 
    FROM table1 AS f 
    JOIN table2 AS dsy 
    JOIN table3 AS ds 
    JOIN table4 AS dp 
    JOIN table5 AS dg 
    WHERE 
    dsy.f1 = f.f1 
    AND ds.f2 = f.f2 
    AND dp.f3 = f.f3 
    AND dg.f4 = f.f4 
    AND dsy.school_year = 2011 
    AND ds.id = 29620 
    AND dp.id = 14120 
    AND dg.grade_level = 5; 

的錯誤是:在多未知表「F」 DELETE

謝謝!

編輯: 實際上,這個查詢的工作原理是,我正在使用模式名稱來聲明我的表像schema.table1(我刪除它發佈一個更清晰的查詢在這裏),模式名稱打破.. 。

+0

您是否嘗試過在取代「F」的別名第一行是實際的表名? 有一個錯誤報告。 http://bugs.mysql.com/bug.php?id=27525。修復似乎只在5.2中? – Marvo

+0

不能執行DELETE table1 ...,錯誤是一樣的,MULTI DELETE中的未知表'table1' –

+2

如果錯誤發生在多數據庫查詢中,那麼必須在數據庫中加上別名前綴名稱。即'DELETE db1.a FROM db1.table1 a JOIN db2.table2 b LEFT JOIN ...' – Matthieu

回答

9

嘗試此查詢 -

DELETE f 
FROM table1 AS f 
JOIN table2 AS dsy 
    ON dsy.f1 = f.f1 
JOIN table3 AS ds 
    ON ds.f2 = f.f2 
JOIN table4 AS dp 
    ON dp.f3 = f.f3 
JOIN table5 AS dg 
    ON dg.f4 = f.f4 
WHERE 
    dsy.school_year = 2011 AND ds.id = 29620 AND dp.id = 14120 AND dg.grade_level = 5; 
+0

這一個工程,謝謝你的幫助!奇怪的是我記得很久以前做了這樣的事情,那是行不通的,這就是爲什麼我把所有東西都放在WHERE ... –

+2

編輯:其實我原來的查詢工作,事情是我使用模式名稱來聲明我的表,如schema.table1,模式名稱中斷... –

+0

包括模式也爲我而死。我必須做「使用myschema」;「在相同的查詢中使其工作。 –

3

您是否試過刪除所有的表別名?有一個類似的解決方案建議here。所以下面可能的工作:

DELETE table1 
    FROM table1 
    JOIN table2 
    JOIN table3 
    JOIN table4 
    JOIN table5 
    WHERE 
    table2.f1 = table1 .f1 
    AND table3.f2 = table1.f2 
    AND table4.f3 = table1.f3 
    AND table5.f4 = table1.f4 
    AND table2.school_year = 2011 
    AND table3.id = 29620 
    AND table4.id = 14120 
    AND table5.grade_level = 5; 
+2

這是我的問題。也許你應該更清楚地回答爲什麼這會起作用。這個問題應該自己站起來,沒有聯繫。 –

+0

問題的關鍵在於你應該在頂部的'DELETE'部分使用你的表別名,而不是表的全名。 – Gruber

1

我解決了同樣的錯誤使用模式後刪除:

DELETE **`schemaX`.f** 
    FROM `schemaX`.table1 AS f 
    JOIN table2 AS dsy 
    JOIN table3 AS ds 
    JOIN table4 AS dp 
    JOIN table5 AS dg 
    WHERE 
    dsy.f1 = f.f1 
    AND ds.f2 = f.f2 
    AND dp.f3 = f.f3 
    AND dg.f4 = f.f4 
    AND dsy.school_year = 2011 
    AND ds.id = 29620 
    AND dp.id = 14120 
    AND dg.grade_level = 5;