Как удалить уникальные записи в mysql?

#mysql #sql

#mysql #sql

Вопрос:

у меня есть таблица, подобная этой

 rowID | StudentName | rollNo | Class
      |             |        |
1     | ABC         |10      |  5   
2     | ABC         |10      |  5
3     | xyz         |11      |  5
4     | asd         |12      |  5
  

как я могу удалить все unique записи, в которых class находится 5

так что у меня осталась таблица в виде

 rowID | StudentName | rollNo | Class
      |             |        |
1     | ABC         |10      |  5  
  

Ответ №1:

Я думаю, это делает то, что вы хотите:

 select min(id), StudentName, rollNo, Class
from t
where class = 5
group by StudentName, rollNo, Class
having count(*) > 1;
  

Если вы действительно хотите удалить записи, то вам нужно использовать delete :

 delete t
    from t left join
         (select studentname, rollno, class, min(id) as min_id, count(*) as cnt
          from t
          group by studentname, rollno, class
         ) tt
         on t.id = tt.minid and tt.cnt > 1
    where tt.minid is null;
  

Ответ №2:

Попробуйте этот

 DELETE t1 FROM table t1
        INNER JOIN
    table t2 
WHERE
    t1.rowID < t2.rowID AND t1.StudentName = t2.StudentName and t1.rollNo=t2.rollNo
  

при этом удаляются все повторяющиеся строки, оставляя ту, которая имеет наибольшее значение rowID