作者phycheout (等待紅顏老)
看板Database
標題[SQL ] delete data in mutiple table
時間Thu Aug 3 06:19:57 2017
(針對
SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
資料庫名稱:MySQL
資料庫版本:
內容/問題描述:
想請教一個算是比較基本的語法
我現在有很多張表(這裡我簡化成3張表)
第二張到最後一張表都有一個field叫做t1_seq
這個欄位表示第一張表的seq
現在我想要把t1中的seq=100這筆資料刪掉
順便我把所有其他表裡面t1_seq=100也刪掉
要怎麼做呢
t1{
seq
}
t2{
seq
t1_seq
}
t3{
seq
t1_seq
}
目前我的寫法是
delete t1,t2,t3 from t1, t2, t3
where t1.seq='100' and
t2.t1_seq=t1.seq and
t3.t1_seq=t1.seq
這樣子做會發生一個問題
當三張表都有 seq= '100'(t1) t1_seq='100'(t2,t3)時
可以順利刪除成功
但假設t3裡面沒有t1_seq='100'的話
t1,t2中的東西也無法被刪除
目前想到就是拆開來 一個一個去delete
是否可以教我如何用更簡單的方式來寫
join group union之類的東西一直沒學好
應該可以很簡單的用一個statement解決這個事情
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 208.101.238.150
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1501712402.A.33B.html
推 meteor007: 我的想法是,抓出資料庫所有的table,再while loop刪? 08/03 08:13
→ moyasi: t1每一筆都 loop一次資料庫有t1_seq的table刪掉 08/03 09:44
→ moyasi: 跟什麼join group union完全沒關係 08/03 09:44
→ flowwinds: 試過 OR? t1seq=100 OR (t2.t1_seq= OR t3.t1_seq= ) 08/03 12:33
→ flowwinds: 一次刪多個table的好像不是所有dbms都支援..建議分開用 08/03 12:38
→ flowwinds: transaction做比較好.. 08/03 12:38
→ flowwinds: 至於先前推文OR的部分請忽略.. 08/03 12:44
→ ChingLan326: 考慮用triger或是設定FK嗎 09/01 15:21