DELETE
  FROM vm1 a
 WHERE EXISTS ( SELECT 1 FROM vm1 WHERE Id = a.Id AND `Type` = a.Type AND EndDate > a.EndDate);

SELECT *
  FROM vm1 a
 WHERE EXISTS ( SELECT 1 FROM vm1 WHERE Id = a.Id AND `Type` = a.Type AND EndDate > a.EndDate);
是没有问题的。

解决方案 »

  1.   


    delete from vml
     where id in (select * (
                 (select id 
                    from vml as a, vml as b 
                   where a.id = b.id
                     and a.type = 'Type'
                     and a.enddate > b.enddate))这样可以吗?
      

  2.   

    delete from vml
     where id in 
                 (select id 
                    from vml as a, vml as b 
                   where a.id = b.id
                     and a.type = 'Type'
                     and a.enddate > b.enddate)
      

  3.   

    DELETE a
      FROM vm1 a
     WHERE EXISTS ( SELECT 1 FROM vm1 WHERE Id = a.Id AND `Type` = a.Type AND EndDate > a.EndDate);
      

  4.   

    或者
    DELETE a
      FROM vm1 a
     WHERE EXISTS ( SELECT 1 FROM vm1 WHERE Id = a.Id AND `Type` = a.Type AND EndDate > a.EndDate);
      

  5.   

    DELETE a
      FROM vm1 a
     WHERE EXISTS ( SELECT 1 FROM vm1 WHERE Id = a.Id AND `Type` = a.Type AND EndDate > a.EndDate);这个MSSQL work,但是MySQL是不Work的。我来测试一下delete from vml
     where id in 
      (select id 
      from vml as a, vml as b 
      where a.id = b.id
      and a.type = 'Type'
      and a.enddate > b.enddate)
      

  6.   

    测试过么?
    这些语法都是错误的在mysql里面
      

  7.   

    没有。因为启用MySQL环境太慢,没有测试。谢谢LZ和feixianxxx 的指正。
      

  8.   

    还好吧 ~你什么系统。。mysql很轻巧呀~
      

  9.   

    MYSQL的语法有限制,不能在WHERE中再出现在DELETE的表。delete a from vm1 a left join select Id,`Type`,min(EndDate) from vm1 group by Id,`Type`) b on a.Id=b.Id and a.Type=b.Type and a.EndDate=b.EndDate where b.id is null
      

  10.   

    能出现啊。。delete a,b from a,b where a.id=b.id这样算出现么?大大 指的情况是什么样子的
      

  11.   

    引用feixianxxx的话测试过么?补充:记得做好备份!
    delete a from vm1 a 
    left join (select Id,`Type`,min(EndDate)  EndDate
    from vm1 group by Id,`Type`) b 
    on a.Id=b.Id and a.Type=b.Type and a.EndDate=b.EndDate where b.id is null;
      

  12.   


    那么1楼的那个SQL可以吗?因为这样我在外面套了一个select。
    请大大指教啊。
      

  13.   

    哦少一个from改完后的是delete from vml
     where id in (select * from (
                 (select id 
                    from vml as a, vml as b 
                   where a.id = b.id
                     and a.type = 'Type'
                     and a.enddate > b.enddate))
      

  14.   

    delete a from vm1 a left join (select Id,`Type`,min(EndDate) as EndDate from vm1 group by Id,`Type`) b on a.Id=b.Id and a.Type=b.Type and a.EndDate=b.EndDate where b.id is null
      

  15.   

    @kimsung:
    可能从写法上你的语句没有问题,但是逻辑上有问题,仅仅判断ID会删除有用数据。