2012-02-14 79 views
1
DELETE FROM table_a WHERE id IN(
    SELECT table_a.id AS id FROM table_a, table_b 
    WHERE table_a.object_id = 1 AND table_a.code = 'code' 
     AND table_a.code = table_b.code 
     AND table_b.id = table_a.b_id 
     AND table_b.table = 'testTable') 

這是我希望MySQL執行的(稍微簡化的)查詢。我讀過其他頁面的stackoverflow,這是不支持,它可以通過使用JOINS解決。這怎麼可能被'轉錄'成使用連接的查詢?我發現很難這樣做,因爲我從來沒有嘗試用多個表創建DELETE查詢。MySQL |您無法在FROM子句中指定目標表'a'進行更新

+1

[DELETING doubled users(MySQL)]的可能重複(http://stackoverflow.com/questions/2669165/deleting-doubled-users-mysql) – 2012-02-14 22:27:22

回答

5

你不能從表中刪除,並引用同一個表中的子查詢—只是限制的MySQL。像下面這樣的東西應該工作:

DELETE FROM table_a 
USING table_a 
INNER JOIN table_b 
    ON table_a.code = table_b.code 
    AND table_b.id = table_a.b_id 
    AND table_b.table = 'testTable' 
WHERE table_a.object_id = 1 
    AND table_a.code = 'code' 

的重要組成部分,是USING。如果您只是加入這兩個表格,您將從兩個表格中刪除記錄。 USING告訴MySQL使用這些表進行處理,但只能從FROM子句中的表中刪除。

http://dev.mysql.com/doc/refman/5.0/en/delete.html

4

這是一種常見的MySQL的問題,使用選擇和更新之間的臨時表/刪除:

DELETE FROM table_a WHERE id IN 
    (select id from 
     (SELECT table_a.id AS id FROM table_a, table_b 
     WHERE table_a.object_id = 1 
     AND table_a.code = 'code' 
     AND table_a.code = table_b.code 
     AND table_b.id = table_a.b_id 
     AND table_b.table = 'testTable') 
    ) tempTable 
2

有用於從複式表刪除兩(略有不同)的語法。這裏有一個沒有USING

DELETE a 
FROM 
     table_a AS a 
    INNER JOIN 
     table_b AS b 
    ON b.code = a.code 
    AND b.id = a.b_id 
WHERE 
     a.object_id = 1 
    AND a.code = 'code' 
    AND b.`table` = 'testTable' --- Do you actually have a column named "table"? 
0

我的方式......如果你可以使用它!

DELETE FROM table_a WHERE id IN(SELECT id FROM(SELECT id FROM table_a WHERE userid=99 GROUP BY mobile HAVING COUNT(mobile) > 1) as t2) 
相關問題