create table Student_test(ROLLNO VARCHAR2(10) NOT NULL
,STNAME VARCHAR2(30) NOT NULL
,PROGRAM VARCHAR2(10) NOT NULL
,FEES NUMBER NOT NULL);
alter table Student_test modify ROLLNO VARCHAR2(20) NOT NULL;
insert into Student_test values('10020220314','DILIP BAKSHI','MCA',42000);
insert into Student_test values('10020220314','DILIP BAKSHI','MCA',42000);
insert into Student_test values('10120220314','SANJAY SINHA','BCA',22000);
insert into Student_test values('10120220314','SANJAY SINHA','BCA',22000);
select ROLLNO,STNAME,PROGRAM,count(1) from Student_test
GROUP BY ROLLNO,STNAME,PROGRAM
HAVING COUNT(1) >1
ORDER BY ROLLNO,STNAME,PROGRAM;
SQL> alter table student_test add constraint pk_student_test primary key(ROLLNO,STNAME,PROGRAM);
alter table student_test add constraint pk_student_test primary key(ROLLNO,STNAME,PROGRAM)
*
ERROR at line 1:
ORA-02437: cannot validate (SYS.PK_STUDENT_TEST) - primary key violated
SQL>
SQL> select * from student_test;
ROLLNO STNAME PROGRAM FEES
-------------------- ------------------------------ ---------- ----------
10020220314 DILIP BAKSHI MCA 42000
10020220314 DILIP BAKSHI MCA 42000
10120220314 SANJAY SINHA BCA 22000
10120220314 SANJAY SINHA BCA 22000
SQL> select ROLLNO,STNAME,PROGRAM,count(1) from Student_test
GROUP BY ROLLNO,STNAME,PROGRAM
HAVING COUNT(1) >1
ORDER BY ROLLNO,STNAME,PROGRAM;
ROLLNO STNAME PROGRAM COUNT(1)
-------------------- ------------------------------ ---------- ----------
10020220314 DILIP BAKSHI MCA 2
10120220314 SANJAY SINHA BCA 2
SQL> select * from student_test
where rowid NOT IN (select max(rowid) from student_test group by ROLLNO,STNAME,PROGRAM);
ROLLNO STNAME PROGRAM FEES
-------------------- ------------------------------ ---------- ----------
10120220314 SANJAY SINHA BCA 22000
10020220314 DILIP BAKSHI MCA 42000
SQL> DELETE FROM Student_test WHERE rowid IN (
SELECT MAX(rowid) FROM Student_test GROUP BY ROLLNO,STNAME,PROGRAM);
2 rows deleted.
SQL>
SQL> alter table student_test add constraint pk_student_test primary key(ROLLNO,STNAME,PROGRAM);
Table altered.
SQL>
SQL SERVER
==================
delete T from
(select Row_Number() Over(Partition By BINARY_CHECKSUM(*) order by %%physloc%% ) As RowNumber, * From Student_test) T
Where T.RowNumber > 1
delete T from
(select Row_Number() Over(Partition By BINARY_CHECKSUM(*) order by %%physloc%% ) As RowNumber, * From Student_test) T
Where T.RowNumber > 1
----------------