求教递归删除的SQL

jiaqiu_2003 2012-02-08 03:28:30
表结构如下:
tableName:test
id pid name
1 null 1
2 1 2
3 1 3
4 3 4

输入参数为id数组,期望结果为删除该id数组中各个id及其子节点的记录
如:
id in (2,3)
则删除后结果为
id pid name
1 null 1

id in (1,3)
则删除后结果为
id pid name
(完全删除)

注:
持久层框架为Mybatis,若能用Mybatis的XML文件亦可。
另:
求教WITH a AS(SELECT * FROM test),在MySql中是否有效。若有效正确写法是什么?
...全文
203 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiaqiu_2003 2012-02-08
  • 打赏
  • 举报
回复
感谢俩位大大,我自己用mybits配置文件做了。
jiaqiu_2003 2012-02-08
  • 打赏
  • 举报
回复
SQL server可以用with X as,可是Mysql做不到。。。唉
修改一下昵称 2012-02-08
  • 打赏
  • 举报
回复
这个是Server SQL 中的写法,可以参考一下

--测试数据
DECLARE @tb Table([id] int,[col1] varchar(8),[col2] int)
insert @tb
select 1,'河北省',0 union all
select 2,'邢台市',1 union all
select 3,'石家庄市',1 union all
select 4,'张家口市',1 union all
select 5,'南宫',2 union all
select 6,'坝上',4 union all
select 7,'任县',2 union all
select 8,'清河',2 union all
select 9,'河南省',0 union all
select 10,'新乡市',9


--删除河南北省及以下所有节点
;with t as(
select * from @tb where id IN(1)
union all
select a.* from @tb a ,t where a.col2=t.id
)

DELETE TB FROM @tb TB WHERE TB.id IN(
SELECT t.id FROM t
)

SELECT * FROM @tb

/*
(10 行受影响)

(8 行受影响)
id col1 col2
----------- -------- -----------
9 河南省 0
10 新乡市 9

(2 行受影响)
*/
ACMAIN_CHM 2012-02-08
  • 打赏
  • 举报
回复
求教WITH a AS(SELECT * FROM test),在MySql中是否有效。若有效正确写法是什么?
MYSQL中无对应语句。
ACMAIN_CHM 2012-02-08
  • 打赏
  • 举报
回复
可以参考下贴中的递归实现思路。

http://blog.csdn.net/acmain_chm/article/details/4142971
MySQL中进行树状所有子节点的查询
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧