• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

求教递归删除的SQL,该怎么解决

mysql 搞代码 7年前 (2018-05-31) 113次浏览 已收录 0个评论

求教递归删除的SQL
表结构如下:
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中是否有效。若有效正确写法是什么?

——解决方案——————–
可以参考下贴中的递归实现思路。

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

——解决方案——————–
这个是Server SQL 中的写法,可以参考一下

SQL code

  --测试数据 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 行受影响) */

欢迎大家阅读《求教递归删除的SQL,该怎么解决》,跪求各位点评,by 搞代码


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:求教递归删除的SQL,该怎么解决

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址