2

2つのテーブルがあります。report(reportIdの主キーとmigratedというビットフィールドがあります)とreport_detail(reportIdの外部キーがあります)です。レポートテーブルで移行されたreportIdを持つreport_detailからすべての行を削除したい=1。これは、必要なすべての行を選択するselectクエリです。

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

4 に答える 4

3
DELETE FROM report_detail
WHERE 
    report_detail.reportId IN
    (
        SELECT reportId 
        FROM report 
        WHERE migrated = 1
    )
于 2010-08-23T16:59:12.573 に答える
2

これにより、テーブル内のすべてが削除される可能性があります。

代わりにこれを試してください:

delete d 
from report_detail d 
inner join report r  
    on r.reportId = d.reportId  
where migrated = 1
于 2010-08-23T16:59:45.140 に答える
2
delete from report_detail d 
inner join report r 
on r.reportId = d.reportId 
where migrated = 1
于 2010-08-23T17:01:00.800 に答える
1

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;
于 2010-08-23T16:59:18.210 に答える