#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