我表述不是很清楚,勿怪。属性栏:ID(主键), STEP。
情况是这样子的。。我想删除一个元组。比如说吧:是菜单栏目里面Step为100001的元组,其ID是随机生成的在它的下面的子组织有Step为100001001和100001002的元组请问如何写命令使我在删除Step为100001元组的时候,连并下面的子组织一起删除。。如何实现。用LIKE还是??我是要得出这样的效果 delete from A where ID=? 并非是直接删除以上3个值。
情况是这样子的。。我想删除一个元组。比如说吧:是菜单栏目里面Step为100001的元组,其ID是随机生成的在它的下面的子组织有Step为100001001和100001002的元组请问如何写命令使我在删除Step为100001元组的时候,连并下面的子组织一起删除。。如何实现。用LIKE还是??我是要得出这样的效果 delete from A where ID=? 并非是直接删除以上3个值。
表 tab
ID Step Name
123123 100001 安徽省
5658 100001001 安徽省县城1
321312 100001002 安徽省县城2
43243 100002 江苏省
32131 100002001 江苏省县城1
29564 100002002 江苏省县城2ID是自动生成的,Step是起分级作用的。 我现在想删除安徽省,这样的话就连带删除了下面的2个县城
反之如果删除县城,是对省没有影响的。 删除上级,所有的下级也连并删除。我这样的句子为什么行不通delete from tab where step like concat('select id from tab','%')因为我得不到Step的值,所以从ID的值来得到Step的值,然后再用LIKE进行操作。但结果是这样的, 如果我将 'select id from tab' 换成具体的值,如:
delete from tab where step like concat('100001','%')就可以进行操作。。 到底怎么样才能得到我想要的上面的语句?
delete a from tab a,tab b where instr(a.Step,b.Step) and b.ID=123123;
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
delete from tab where step like concat((select Step from tab where id='123123'),'%')
2. 你的 insert into xxx ... 语句提供这两样。我连你的ID/STEP字段是数字还是字符都不知道。
create table tb
(
id varchar(10),
step varchar(10),
name varchar(20)
)
insert into tb values(431 , 100,'安徽省')
insert into tb values(53425 , 100001 '安徽省县城1')
insert into tb values(412123 , 100002 '安徽省县城2')
insert into tb values(54325 , 100003 '安徽省县城3')
insert into tb values(54325 , 101 '江苏省')
insert into tb values(41234 , 101001 '江苏省县城1')
insert into tb values(5654 , 101002 '江苏省县城2')
insert into tb values(8687 , 101003 '江苏省县城3')ID是主键,自动生成的。我能得到ID的值,但是得不到Step的值,所以我要通过ID来得到Step的值,
因为我删除的要求是 当我删除Step=100的这一行,那么它的下属单位100001,100002,100003也会被删除。那么这就可能用到 DELETE FROM tb where step LIKE '100%'
我需要得到类似这样的语句delete from tb where STEP=? 是要带问号的语句我写的是这样的,但是是错误的
<DeleteCommands>
<SQL>
<CommandText>delete from G_Menu where Step like concat((select Step from g_menu where id = ?ID),'%')</CommandText>
<ParameterCollection>
<Parameter Name="ID" Type="Long"/>
</ParameterCollection>
</SQL>
</DeleteCommands>
mysql> select * from tb;
+--------+--------+-------------+
| id | step | name |
+--------+--------+-------------+
| 431 | 100 | 安徽省 || 53425 | 100001 | 安徽省县城1 |
| 412123 | 100002 | 安徽省县城2 |
| 54325 | 100003 | 安徽省县城3 |
| 54325 | 101 | 江苏省 |
| 41234 | 101001 | 江苏省县城1 |
| 5654 | 101002 | 江苏省县城2 |
| 8687 | 101003 | 江苏省县城3 |
+--------+--------+-------------+
8 rows in set (0.00 sec)mysql>
ON INSTR(a.name,b.name)>0
WHERE b.step=100
delete from tab where step like concat((select Step from tab where id='123123'),'%')
这种写法,其它数据库支持
+--------+--------+-------------+
| id | step | name |
+--------+--------+-------------+
| 431 | 100 | 安徽省 |
| 53425 | 100001 | 安徽省县城1 |
| 412123 | 100002 | 安徽省县城2 |
| 54325 | 100003 | 安徽省县城3 |
| 54325 | 101 | 江苏省 |
| 41234 | 101001 | 江苏省县城1 |
| 5654 | 101002 | 江苏省县城2 |
| 8687 | 101003 | 江苏省县城3 |
+--------+--------+-------------+
8 rows in set (0.00 sec)mysql> delete a from tb a,(select step from tb where ID=431) b where instr(a.Step,b.Step)=1 ;
Query OK, 4 rows affected (0.06 sec)mysql> select * from tb;
+-------+--------+-------------+
| id | step | name |
+-------+--------+-------------+
| 54325 | 101 | 江苏省 |
| 41234 | 101001 | 江苏省县城1 |
| 5654 | 101002 | 江苏省县城2 |
| 8687 | 101003 | 江苏省县城3 |
+-------+--------+-------------+
4 rows in set (0.00 sec)mysql>
Query OK, 1 row affected (0.06 sec)mysql> select * from tb;
+-------+--------+-------------+
| id | step | name |
+-------+--------+-------------+
| 54325 | 101 | 江苏省 |
| 41234 | 101001 | 江苏省县城1 |
| 8687 | 101003 | 江苏省县城3 |
+-------+--------+-------------+
3 rows in set (0.00 sec)mysql>