作者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://webptt.com/cn.aspx?n=bbs/Database/M.1501712402.A.33B.html
1F:推 meteor007: 我的想法是,抓出资料库所有的table,再while loop删? 08/03 08:13
2F:→ moyasi: t1每一笔都 loop一次资料库有t1_seq的table删掉 08/03 09:44
3F:→ moyasi: 跟什麽join group union完全没关系 08/03 09:44
4F:→ flowwinds: 试过 OR? t1seq=100 OR (t2.t1_seq= OR t3.t1_seq= ) 08/03 12:33
5F:→ flowwinds: 一次删多个table的好像不是所有dbms都支援..建议分开用 08/03 12:38
6F:→ flowwinds: transaction做比较好.. 08/03 12:38
7F:→ flowwinds: 至於先前推文OR的部分请忽略.. 08/03 12:44
8F:→ ChingLan326: 考虑用triger或是设定FK吗 09/01 15:21