2016-07-19 32 views
0

這可能被標記爲重複,但我無法在我的搜索中找到此示例。MYSQL刪除行如果重複的鍵存在與指定值相同的表

我有一個產品到類別的表,允許重複鍵,因此允許按ID分類放置多個產品。我有一種情況,幾千種產品被錯誤地放在一個類別中。如果產品分配了「動作圖」和「漫畫」,則「漫畫」分配是錯誤的。

我正在嘗試編寫一個單一的MYSQL查詢,如果檢測到具有重複鍵和指定的'Action Figures'值的行,將刪除行。另一種說法是:如果一個產品被分配到兩個類別,那麼我想刪除將其分配給錯誤類別的行。

我似乎無法找出一個刪除語句,可以按照我想要的方式通過ID在同一張表中進行搜索。

這裏就是我這麼遠(編輯 - 由於下面的答案):

DELETE FROM oc_product_to_category c1 
WHERE c1.category_id = '25' 
AND EXISTS(
SELECT * FROM oc_product_to_category c2 
WHERE c1.product_id = c2.product_id AND c2.category_id = '24') 

不幸的是,這是一個產區語法錯誤。

You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near 
'c1 
WHERE c1.category_id = '25' 
AND EXISTS (
SELECT * FROM oc_product_to_catego' at line 1 

當我嘗試語法

DELETE c1 FROM oc_product_to_category c1 ... 

我得到一個錯誤:

You can't specify target table 'c1' for update in FROM clause 

回答

0

這應該讓你開始。如果一個ID被分配給兩個CATEGORY_ID 25和33,它將與類別中刪除記錄(一個或多個)25

DELETE c1 FROM oc_product_to_category as c1 
WHERE c1.category_id = '25' 
AND EXISTS (
    SELECT id FROM (SELECT * FROM oc_product_to_category) as c2 
    WHERE c1.id = c2.id AND c2.category_id = '33' 
) 

請注意,如果存在的話,這將不會與33 CATEGORY_ID刪除重複記錄。

+0

我不知道你可以使用2個不同的別名來引用同一個表...無知再次罷工。是的,這些數字是任意的,但我試圖修復數據。實際值是25和33,但不用擔心。 –

+0

這是一個非常有用的比較表內值的工具。我已經更新了26到33.另外,如果解決了您的問題,請將答案標記爲已接受。 –

+0

我編輯了我的問題,得到了一個語法錯誤,並且沒有足夠的SQL解析經驗來解密它。另外,感謝您編輯您的答案。我的第一條評論的最後一句話是針對另一個已被刪除的評論。 –