У меня есть запрос на удаление SQL - PullRequest
2 голосов
/ 23 августа 2010

Существует две таблицы: report (который имеет первичный ключ reportId и битовое поле с именем migrated) и report_detail (который имеет внешний ключ reportId).Я хочу удалить все строки из report_detail, у которых есть reportId, который в таблице отчетов перенесен = 1. Это запрос на выборку, который выбирает все нужные мне строки:

select * 
from report r inner join report_detail d 
    on r.reportId = d.reportId 
where migrated = 1

Будет ли это удаленозапрос делать то, что я хочу, или я делаю что-то не так?

delete from report_detail
where exists(
    select * 
    from report r inner join report_detail d 
        on r.reportId = d.reportId 
    where migrated = 1
)

Ответы [ 4 ]

3 голосов
/ 23 августа 2010
DELETE FROM report_detail
WHERE 
    report_detail.reportId IN
    (
        SELECT reportId 
        FROM report 
        WHERE migrated = 1
    )
2 голосов
/ 23 августа 2010
delete from report_detail d 
inner join report r 
on r.reportId = d.reportId 
where migrated = 1
2 голосов
/ 23 августа 2010

Это, вероятно, удалит все в вашей таблице.

попробуйте вместо этого:

delete d 
from report_detail d 
inner join report r  
    on r.reportId = d.reportId  
where migrated = 1
1 голос
/ 23 августа 2010

MySQL имеет способ удалить из определенной таблицы при объединении с другими таблицами:

DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;

Или:

DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3
WHERE t1.id=t2.id AND t2.id=t3.id;
...