إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

كيف أحذف القيم المكررة في جدول


6 رد (ردود) على هذا الموضوع

#1 ahmedeltaiep

ahmedeltaiep

    عضو

  • الأعضــاء
  • 11 مشاركة

تاريخ المشاركة 18 April 2008 - 06:06 PM

السلام عليكم ورحمة الله وبركاته
السؤال ده مهم وجميل في نفس الوقت
اذا كان في تيبل كالاتي
Names

ID N
--- ----
1 as
1 as
1 as
2 db
2 db
2 db
2 db
2 db
وهذا الجدول ليس به برايمري كي او يونيك ...فكيف نستطيع حذف المكرر بحيث تصبح النتيجة بعد جملة الدليت كالاتي
ID N
--- ----
1 as
2 db

مع أطيب التمنيات بالتوفيق

#2 Ahmed Farghaly

Ahmed Farghaly

    عضو نشط

  • الأعضــاء
  • 233 مشاركة

تاريخ المشاركة 20 April 2008 - 06:14 AM

بسم الله الرحمن الرحيم

يمكن عمل هذا عن طريق تخليق جدول آخر وتأخد فيه القيم مع عدم التكرار .

create table tab_name2 as select distinct id_n from tab_name1

Oracle Developer

OCP

ومــا توفيـقــى إلا باللـــــه

#3 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 20 April 2008 - 09:49 AM

فكيف نستطيع حذف المكرر

اى اننا لن نقوم بعمل جدول اخر .

و من ثم فسوف نقوم الأن ببناء الجدول و اضافة البيانات .... ثم نكتب الكود الذى سيحذف القيم المكرره ...... كالتالى :-

create table t1 ( id number , N varchar2(11));

insert into t1 values (1,'as');
insert into t1 values (1,'as');
insert into t1 values (1,'as');
insert into t1 values (1,'as');
insert into t1 values (2,'db');
insert into t1 values (2,'db');
insert into t1 values (2,'db');
insert into t1 values (2,'db');

commit;


و هذا هو الكود الذى سيحذف القيم المكرره :-

DELETE FROM t1 a
WHERE a.ROWID > ANY (SELECT b.ROWID
FROM t1 b
WHERE a.ID = b.ID AND a.n = b.n);


و الناتج سيكون :-

SQL> select * from t1;

		ID N
---------- -----------
		 1 as
		 2 db

و بالتوفيق للجميع

#4 Slamonty

Slamonty

    عضو

  • الأعضــاء
  • 30 مشاركة

تاريخ المشاركة 25 April 2008 - 10:58 AM

Also, you can use this:

DELETE FROM test WHERE rowid not in (SELECT SUM(rowid) FROM test GROUP BY id)

لا إله إلا الله وحده لا شريك له له الملك و له الحمد يحيي و يميت و هو علي كل شيء قدير

#5 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 25 April 2008 - 12:30 PM

أخى العزيز Slamonty

شكراً لمشاركتك ..... و لكن انا لا اعرف اذا كنت قمت بتجريب كودك قبل وضعه فى المنتدى ام لا ..... لأن الكود لم ينفع معى .... فبعد تجريب كودك على مثالى ( طبعاً بأستبدال جدول ال test الذى ذكرته بكودك بجدول ال t1 الذى كتب بكودى به فى المشاركة السابقة ) و كانت هذه هى النتيجة :-

SQL> DELETE FROM t1 WHERE rowid not in (SELECT SUM(rowid) FROM t1 GROUP BY id);
DELETE FROM t1 WHERE rowid not in (SELECT SUM(rowid) FROM t1 GROUP BY id)
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got ROWID


that's all
have a nice day

#6 Slamonty

Slamonty

    عضو

  • الأعضــاء
  • 30 مشاركة

تاريخ المشاركة 25 April 2008 - 03:42 PM

Thank you for your attention,I am sorry for the mistake,

kindly, change the SUM function to MAX or MIN in the code, it will work well in shaa allah

DELETE FROM t1 WHERE rowid not in (SELECT MAX(rowid) FROM t1 GROUP BY id);

لا إله إلا الله وحده لا شريك له له الملك و له الحمد يحيي و يميت و هو علي كل شيء قدير

#7 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 26 April 2008 - 01:38 PM

DELETE FROM t1 WHERE ROWID NOT IN (SELECT   MAX (ROWID)
FROM t1 GROUP BY ID);

6 rows deleted.

SQL> SELECT * FROM t1; ID N
---------- -----------
1 as 2 db


working great ...... thanks a lot for your participation


تم التعديل بواسطة hanyfreedom, 16 September 2008 - 07:00 PM.