我表述不是很清楚,勿怪。属性栏:ID(主键), STEP。
            
情况是这样子的。。我想删除一个元组。比如说吧:是菜单栏目里面Step为100001的元组,其ID是随机生成的在它的下面的子组织有Step为100001001和100001002的元组请问如何写命令使我在删除Step为100001元组的时候,连并下面的子组织一起删除。。如何实现。用LIKE还是??我是要得出这样的效果    delete from A where ID=?       并非是直接删除以上3个值。

解决方案 »

  1.   

    delete from A where ID like '100001%'
      

  2.   

    delete from A where left(ID,7)='100001'
      

  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','%')就可以进行操作。。  到底怎么样才能得到我想要的上面的语句?
      

  4.   

    删除安徽省,这样的话就连带删除了下面的2个县城
    delete a from tab a,tab b where instr(a.Step,b.Step) and b.ID=123123;
      

  5.   

    delete from  tab where step like concat((select id from tab where id='100001'),'%')
      

  6.   

    delete from  tab where step like concat((select Step from tab where id='123123'),'%')
      

  7.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  8.   


    delete from  tab where step like concat((select Step from tab where id='123123'),'%')
      

  9.   

    啊? 我用的是MySQL 5.1.。。这版不是MySQL么?
      

  10.   

      1. 你的 create table xxx .. 语句
      2. 你的 insert into xxx ... 语句
    提供这两样。我连你的ID/STEP字段是数字还是字符都不知道。
      

  11.   

    建表如下:    求DELETE语句
    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>
      

  12.   

    抄错了,,ID和STEP是  int(10)
      

  13.   

    里面的SELECT语句能得到STEP的值,整句也能执行,但是删除不了
      

  14.   

    insert into tb values(5654 , 101002  '江苏省县城2')语法错误,不会吧。建议提供前先自己试一下!
      

  15.   

    少了个分号。你是不是想输入431 ,然后删除所有的
    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>
      

  16.   

    DELETE a FROM  tbd a INNER JOIN tbd b 
    ON INSTR(a.name,b.name)>0
    WHERE b.step=100
      

  17.   

    MYSQL不支持
    delete from  tab where step like concat((select Step from tab where id='123123'),'%')
    这种写法,其它数据库支持
      

  18.   

    delete a from tb a,(select step from tb where ID=431) b where instr(a.Step,b.Step)=1 ;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> 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>
      

  19.   

    mysql> delete a from tb a,(select step from tb where ID=5654) b where instr(a.Step,b.Step)=1 ;
    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>
      

  20.   

    因为ID是自动生成的,没有规律可循,所以我通过STEP删除,但是STEP得不到,只能得到ID,于是通过就产了了问题咯,   通过得到ID来查处100这个STEP,然后通过这个100,来删除100以及包括它下面的100001,100002,100003.   我做的东西是办公自动化的数据库。里面有部门。部门有上下级之分。。当我想要废弃一个部门的时候,本来是可以直接通过ID删除这个部门的。但是他还有子部门,也就是STEP增三位的子部门,于是我还要删除掉这些子部门。希望能用一个删除语句搞定不好意思,语言表述能力垃圾,书到用时方恨少
      

  21.   

    谢谢高手,解决了。不过你能不能给我讲解下这个语句的意思啊,instra我从来没见过啊。。你写的这种DELETE语句我也没见过。。麻烦讲解下。。万分感谢!