查看: 1109|回复: 5
|
如何写这段sql statement呢?(for delete purpose)
[复制链接]
|
|
我的table如下
ID Parent_ID Name
1 0 Marcus
2 0 Kelvin
3 1 Jay
4 1 Yuki
5 3 Jordan
6 3 Sam
7 2 Jack
DELETE FROM user WHERE ID = '1' OR Parent_ID = '1'
如果我用以上的query只能delete到 ID=1 or Parent_ID=1 的资料,我要如何才能把和ID=1有关联的资料也delete呢?
比如说,ID=5 和 ID=6 的资料,这两个资料应当也被delete,因为他们的 Parent_ID = 3,
而[3]这个ID的Parent_ID也等于[1]
最后剩下的record应该只剩下是 ID=2 和 ID=7 的资料 |
|
|
|
|
|
|
|
发表于 12-12-2006 10:21 AM
|
显示全部楼层
建议用trigger来delete比较直接,而且同一个table里的两个column做reference好象不是很好。。 |
|
|
|
|
|
|
|

楼主 |
发表于 12-12-2006 10:29 AM
|
显示全部楼层
基于一些因数,我的table design必须这样.....
其实如果用两段sql的话就可以做到我要做的东西,但我想知道如何用一段sql就搞定 |
|
|
|
|
|
|
|
发表于 12-12-2006 12:43 PM
|
显示全部楼层
回复 #3 counterking 的帖子
假设:
1. Parent child level 数目是固定.
2. 数据库- MS SQL 或 Oracle
DELETE FROM USER WHERE
(ID = '1' OR Parent_ID = '1'
OR
EXISTS (SELECT 1
FROM USER PARENT
WHERE PARENT.Parent_ID = '1'
AND PARENT.ID = USER.Parent_ID));
要用一段sql就搞定并不难, 难在写一个比较快的sql.
以上sql, 不担保performance issue. |
|
|
|
|
|
|
|
发表于 12-12-2006 12:46 PM
|
显示全部楼层
回复 #3 counterking 的帖子
假设:
1. Parent child level 数目是固定.
2. 数据库- MS SQL 或 Oracle
DELETE FROM USER WHERE
(ID = '1' OR Parent_ID = '1'
OR
EXISTS (SELECT 1
FROM USER PARENT
WHERE PARENT.Parent_ID = '1'
AND PARENT.ID = USER.Parent_ID));
要用一段sql就搞定并不难, 难在写一个比较快的sql.
以上sql, 不担保performance issue. |
|
|
|
|
|
|
|
发表于 12-12-2006 11:45 PM
|
显示全部楼层
用 stored procedure 来做吧...
直接执行两个 sql.
DELETE FROM user WHERE ID IN (SELECT tmp.ID FROM user tmp WHERE tmp.Parent_ID = '1')
DELETE FROM user WHERE ID = '1' OR Parent_ID = '1' |
|
|
|
|
|
|
| |
本周最热论坛帖子
|