2012-02-14 2 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. Как это можно «переписать» на запрос с помощью JOINS? Мне трудно это сделать, потому что я никогда не пробовал создавать запросы DELETE с более чем одной таблицей.MySQL | Вы не можете указать целевую таблицу 'a' для обновления в предложении FROM.

+1

возможно дубликат [УДАЛЕНИЕ удвоилась пользователей (MySQL)] (http://stackoverflow.com/questions/2669165/deleting-doubled-users-mysql) –

ответ

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

Есть два (немного разные) Синтаксисы для удаления из mutliple таблиц. Вот один без 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

My Way ... Если бы вы могли использовать это!

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) 
Смежные вопросы

 Смежные вопросы