删除表内innerNO对应的SerialNO值不是最大的所有数据

  
  
  
  
  1. mysql> select * from t2; 
  2. +----+----------+---------+ 
  3. | id | SerialNO | InnerNo | 
  4. +----+----------+---------+ 
  5. |  1 |       19 |      10 |  
  6. |  2 |       16 |      10 |  
  7. |  3 |       99 |      10 |  
  8. |  4 |       17 |      10 |  
  9. |  5 |       53 |      11 |  
  10. |  6 |       67 |      11 |  
  11. |  7 |       89 |      12 |  
  12. +----+----------+---------+ 
  13. 7 rows in set (0.02 sec) 

需求:
这样的表,要删除innerNO对应的SerialNO值不是最大的所有数据。
例如innerNO=10,这个对应SerialNO值是19,16,99,17,只留这4条最大的SerialNO值,其他的都给删了。

  
  
  
  
  1. mysql> select a.*,b.* from t2 a left join t2 b on a.InnerNO=b.InnerNO where a.SerialNO < b.SerialNO group by a.SerialNO; 
  2. +----+----------+---------+------+----------+---------+ 
  3. | id | SerialNO | InnerNo | id   | SerialNO | InnerNo | 
  4. +----+----------+---------+------+----------+---------+ 
  5. |  2 |       16 |      10 |    1 |       19 |      10 |  
  6. |  4 |       17 |      10 |    1 |       19 |      10 |  
  7. |  1 |       19 |      10 |    3 |       99 |      10 |  
  8. |  5 |       53 |      11 |    6 |       67 |      11 |  
  9. +----+----------+---------+------+----------+---------+ 
  10. 4 rows in set (0.05 sec) 
  
  
  
  
  1. mysql> delete a from t2 a join t2 b on a.InnerNO=b.InnerNO where a.SerialNO < b.SerialNO ; 
  2. Query OK, 4 rows affected (0.20 sec) 
  3.  
  4. mysql> select * from t2; 
  5. +----+----------+---------+ 
  6. | id | SerialNO | InnerNo | 
  7. +----+----------+---------+ 
  8. |  3 |       99 |      10 |  
  9. |  6 |       67 |      11 |  
  10. |  7 |       89 |      12 |  
  11. +----+----------+---------+ 
  12. 3 rows in set (0.03 sec) 

 

 

你可能感兴趣的:(JOIN,表自连接)