sql form Oracle মধ্যে টেবিল থেকে সদৃশ সারি মুছে ফেলা হচ্ছে




w3schools css (17)

আমি ওরাকলে কিছু পরীক্ষা করছি এবং কিছু নমুনা ডেটা সহ একটি টেবিল তৈরি করেছি, কিন্তু প্রক্রিয়ার মধ্যে আমি ভুলভাবে নকল রেকর্ড লোড করেছি, তাই এখন আমি কিছু কলাম ব্যবহার করে প্রাথমিক কী তৈরি করতে পারি না।

আমি কিভাবে সমস্ত সদৃশ সারি মুছতে পারি এবং তাদের মধ্যে কোন একটিই ছেড়ে দিতে পারি?


Answer #1
create or replace procedure delete_duplicate_enq as
    cursor c1 is
    select *
    from enquiry;
begin
    for z in c1 loop
        delete enquiry
        where enquiry.enquiryno = z.enquiryno
        and rowid > any
        (select rowid
        from enquiry
        where enquiry.enquiryno = z.enquiryno);
    end loop;
 end delete_duplicate_enq;

Answer #2
delete from dept
where rowid in (
     select rowid
     from dept
     minus
     select max(rowid)
     from dept
     group by DEPTNO, DNAME, LOC
);

Answer #3

আপনি লুপের জন্য একটি কার্সার ব্যবহার করে একটি ছোট pl / sql ব্লক করতে হবে এবং যে সারিগুলি আপনি রাখতে চান না তা মুছুন। এই ক্ষেত্রে:

declare
prev_var my_table.var1%TYPE;

begin

for t in (select var1 from my_table order by var 1) LOOP

-- if previous var equal current var, delete the row, else keep on going.
end loop;

end;

Answer #4

T1 থেকে স্বতন্ত্র নির্বাচন * হিসাবে টেবিল টি 2 তৈরি করুন;


Answer #5

rowid ব্যবহার করুন।

DELETE FROM your_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM your_table
GROUP BY column1, column2, column3);

যেখানে column1 , column2 , এবং column3 প্রতিটি রেকর্ডের জন্য সনাক্তকারী কী তৈরি করে। আপনি আপনার সব কলাম তালিকা হতে পারে।


Answer #6

5. সমাধান

delete from emp where rowid in 
    (
      select  rid from
       (
         select rowid rid,rank() over (partition by emp_id order by rowid)rn from emp     
       )
     where rn > 1
    );

Answer #7

devx.com/tips/Tip/14665 থেকে:

DELETE FROM our_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM our_table
GROUP BY column1, column2, column3...) ;

কলাম 1, কলাম 2, ইত্যাদি যেখানে আপনি ব্যবহার করতে চান।


Answer #8

জিজ্ঞাসা টম থেকে

delete from t
 where rowid IN ( select rid
                    from (select rowid rid, 
                                 row_number() over (partition by 
                         companyid, agentid, class , status, terminationdate
                                   order by rowid) rn
                            from t)
                   where rn <> 1);

(অনুপস্থিত বন্ধনী সংশোধন করা হয়েছে)


Answer #9

1. সমাধান

delete from emp
    where rowid not in
    (select max(rowid) from emp group by empno);

2. Sloution

delete from emp where rowid in
               (
                 select rid from
                  (
                    select rowid rid,
                      row_number() over(partition by empno order by empno) rn
                      from emp
                  )
                where rn > 1
               );

3.solution

delete from emp e1
         where rowid not in
          (select max(rowid) from emp e2
           where e1.empno = e2.empno ); 

4. সমাধান

 delete from emp where rowid in
            (
             select rid from
                (
                  select rowid rid,
                  dense_rank() over(partition by empno order by rowid
                ) rn
             from emp
            )
 where rn > 1
);

Answer #10

সমাধান 4)

 delete from emp where rowid in
            (
             select rid from
                (
                  select rowid rid,
                  dense_rank() over(partition by empno order by rowid
                ) rn
             from emp
            )
 where rn > 1
);

Answer #11

সমাধান 1)

delete from emp
where rowid not in
(select max(rowid) from emp group by empno);

সমাধান 2)

delete from emp where rowid in
               (
                 select rid from
                  (
                    select rowid rid,
                      row_number() over(partition by empno order by empno) rn
                      from emp
                  )
                where rn > 1
               );

সমাধান 3)

delete from emp e1
         where rowid not in
          (select max(rowid) from emp e2
           where e1.empno = e2.empno ); 

Answer #12
DELETE FROM tablename a
      WHERE a.ROWID > ANY (SELECT b.ROWID
                             FROM tablename b
                            WHERE a.fieldname = b.fieldname
                              AND a.fieldname2 = b.fieldname2)

Answer #13
DELETE FROM tableName  WHERE ROWID NOT IN (SELECT   MIN (ROWID) FROM table GROUP BY columnname);

Answer #14

সত্যিই বড় টেবিল জন্য দ্রুততম উপায়

  1. নীচের গঠন সঙ্গে ব্যতিক্রম টেবিল তৈরি করুন: exceptions_table

    ROW_ID ROWID
    OWNER VARCHAR2(30)
    TABLE_NAME VARCHAR2(30)
    CONSTRAINT VARCHAR2(30)
  2. একটি অনন্য সীমাবদ্ধতা বা প্রাথমিক কী তৈরি করুন যা সদৃশ দ্বারা লঙ্ঘন করা হবে। আপনি একটি সদৃশ বার্তা পাবেন কারণ আপনি সদৃশ আছে। ব্যতিক্রম টেবিলে ডুপ্লিকেট সারির জন্য সারি থাকবে।

    alter table add constraint
    unique --or primary key
    (dupfield1,dupfield2) exceptions into exceptions_table;
  3. Rowid দ্বারা exceptions_table সঙ্গে আপনার টেবিল যোগ দিন এবং ডুপ মুছে দিন

    delete original_dups where rowid in (select ROW_ID from exceptions_table);
  4. যদি সারিগুলি মুছে ফেলার সারি বড় হয়, তবে একটি নতুন টেবিল তৈরি করুন (সমস্ত অনুদান এবং সূচী সহ) সারি দ্বারা exceptions_table এন্টি-এ যোগদান করুন এবং মূল টেবিলটির মূল_ডুপস টেবিলে পুনঃনামকরণ করুন এবং নতুন টেবিলটি নতুন_table_with_no_dups নামুন

    create table new_table_with_no_dups AS (
        select field1, field2 ........ 
        from original_dups t1
        where not exists ( select null from exceptions_table T2 where t1.rowid = t2.row_id )
    )

Answer #15

সেরা পারফরম্যান্সের জন্য, আমি যা লিখেছি তা এখানে:
(নির্বাহ পরিকল্পনা দেখুন)

DELETE FROM your_table
WHERE rowid IN 
  (select t1.rowid from your_table  t1
      LEFT OUTER JOIN (
      SELECT MIN(rowid) as rowid, column1,column2, column3
      FROM your_table 
      GROUP BY column1, column2, column3
  )  co1 ON (t1.rowid = co1.rowid)
  WHERE co1.rowid IS NULL
);

Answer #16

ডুপ্লিকেটগুলি নির্বাচন করতে শুধুমাত্র ক্যোয়ারী ফর্ম্যাটটি হতে পারে:

SELECT GroupFunction(column1), GroupFunction(column2),..., 
COUNT(column1), column1, column2...
FROM our_table
GROUP BY column1, column2, column3...
HAVING COUNT(column1) > 1

তাই অন্যান্য পরামর্শ অনুযায়ী সঠিক প্রশ্ন হল:

DELETE FROM tablename a
      WHERE a.ROWID > ANY (SELECT b.ROWID
                             FROM tablename b
                            WHERE a.fieldname = b.fieldname
                              AND a.fieldname2 = b.fieldname2
                              AND ....so on.. to identify the duplicate rows....)

এই প্রশ্নের WHERE CLAUSE নির্বাচিত মানদণ্ডের জন্য ডাটাবেসের সবচেয়ে পুরনো রেকর্ড রাখা হবে।

ওরাকল সার্টিফাইড অ্যাসোসিয়েট (২008)


Answer #17

সারি ব্যবহার করে

delete from emp
 where rowid not in
 (select max(rowid) from emp group by empno);

স্ব যোগদান ব্যবহার করে-

delete from emp e1
 where rowid not in
 (select max(rowid) from emp e2
 where e1.empno = e2.empno );




delete-row