2010-08-23 51 views
2

有兩個表:report(它有一個主鍵reportId和一個位域稱爲遷移)和report_detail(它有一個外鍵reportId)。我想刪除所有來自report_detail有哪些,報告表,已經遷移= 1。這是選擇所有我想要的行選擇查詢reportId行:我有一個SQL刪除查詢

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 
) 
+0

請與該品牌的數據庫(S)使用,例如標記您的問題'mysql'或'sql-server'。答案可能會有所不同,具體取決於您使用的數據庫。 – 2010-08-23 16:58:33

回答

3
DELETE FROM report_detail 
WHERE 
    report_detail.reportId IN 
    (
     SELECT reportId 
     FROM report 
     WHERE migrated = 1 
    ) 
+0

你也可以爲EXISTS重寫這個:'WHERE EXISTS(選擇reportID FROM Report where Migrated = 1)'這可能會運行得更快,具體取決於表中有多少行。 – JNK 2010-08-23 17:17:35

1

MySQL有來自某特定表的方式來delete,而與其他表連接:

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; 
2

,在可能會刪除一切你表。

試試這個:

delete d 
from report_detail d 
inner join report r 
    on r.reportId = d.reportId 
where migrated = 1 
+0

這不會刪除已遷移的兩個表中的所有內容嗎?我只想從report_detail表中刪除。 – dmr 2010-08-23 17:06:19

+0

我添加了別名,以便查詢可以正常工作。不,它不會從兩個表中刪除只有指定要刪除的表。 – HLGEM 2010-08-23 19:05:08

2
delete from report_detail d 
inner join report r 
on r.reportId = d.reportId 
where migrated = 1