本人新手,有个SQL语句写不来.情况如下: 数据库有3个表(为了方便,我字段用中文表示) 帐号表:account(id,name) 
人物表:user(id,登记时间,级别) 
数据表:data(id,操作记录) 
三个表通过id关联 现在我想删除三个表中的相关数据:条件是人物表中'登记时间'小于2007-11-20   并且'级别'小于5的所有数据. 
delete   from   account   where   id   in 
(select   id   from   user   where   登记时间 <'2007-11-20'   and   级别 <5); delete   from   data   where   id   in 
(select   id   from   user   where   登记时间 <'2007-11-20'   and   级别 <5); delete   from   user   where   登记时间 <'2007-11-20'   and   级别 <5;
感谢了,还有个问题帮解答下,马上结贴了. 比如要删除   data表中的数据,条件是data表中的id在user表中不存在的delete   from   data   where   id   not   in(select   id   from   user); 好像是这样我试了这两种方法,MYsql都提示有语法错误,我的是mysql4.0的,应该怎么办呢?

解决方案 »

  1.   

    是一下这两句,看看有没有错,mySLQ 4应该支持 in (select ...)select * from data where id in (select id from user);
    select * from data where id not in (select id from user);
    == 思想重于技巧 ==
      

  2.   

    in不行就连表delete account.* from account inner join user on account.id=user.id where 登记时间<'2007-11-20' and 级别<5;
      

  3.   

    not in 试试delete data.* FROM data LEFT JOIN user ON data.id=user.id WHERE user.id IS NULL; 
      

  4.   

    不支持,好像就能用 left join
      

  5.   


    是一下
    select * from data where id = any (select id fromuser);
    == 思想重于技巧 ==
      

  6.   

    我写的那两句测试过是可以的,我以前觉得not in效率低,所以一直用left join的
      

  7.   

    delete from account,data,user using account,data,user where account.id=data.id and account.id=user.id and 登记时间<"200...." and 级别<"5"
    没有试过。你可以先备份数据试一下。
    delete from data using data left join user on data.id=user.id where user.id is NULL
    试试?