表结构如下:
id | pid
1 | 0
2 | 1
3 | 1
4 | 3
5 | 4
.. ..
已知某个id号 ,如何删除这个Id号下所有的子孙记录。
如已知id为1 则删除第1,2,3,4,5条记录.因为 记录2 的pid=1,记录3的Pid=1,记录4的PID=3....
id | pid
1 | 0
2 | 1
3 | 1
4 | 3
5 | 4
.. ..
已知某个id号 ,如何删除这个Id号下所有的子孙记录。
如已知id为1 则删除第1,2,3,4,5条记录.因为 记录2 的pid=1,记录3的Pid=1,记录4的PID=3....
delete 表名 where id>=1
如果是删除pid=1的则为
delete 表名 where id=1 or pid=1
到于怎么用SQL语句
ADO和DAO中都有一个Execute方法
如
sql="delete 表名 where id=1 or pid=1"
database.execute sql
用递归吧
如下面的
Function DeleteID(mID As Integer) As Integer
Dim rs As Recordset
mDB.Execute "delete from test where id=" & mID
Set rs = mDB.OpenRecordset("select * from test where pid=" & mID)
Do While Not rs.EOF
DeleteID rs.Fields("ID")
rs.MoveNext
Loop
End Function
Dim Cn As New ADODB.Connection
Dim Rs As New ADODB.Recordset
Dim i As Integer
Cn.Open 连接字符串
Rs.Open "select * from 表名 where pid='" & ID & "'", Cn, adOpenStatic, adLockBatchOptimistic
If Rs.RecordCount > 0 Then Rs.MoveFirst
For i = 1 To Rs.RecordCount
ID = Rs("pid")
Call Gadd_Child(ID)
Rs.MoveNext
Next i
Rs.Open "delete from 表名 where pid='" & ID & "'", Cn, adOpenStatic, adLockBatchOptimistic
End Sub
where pid in (select pid from #table)
Dim Rs As New ADODB.Recordset