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

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

صورة
- - - - -

سؤال في خذف القيم المكرره


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

#1 waleed.ita

waleed.ita

    عضو

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

تاريخ المشاركة 12 February 2009 - 02:04 AM

السلام عليكم ورحمه الله وبركاته
كنت عاوز اعرف شرح الطريقه دي لاني مش فاهم معناها ايه بصراحه في حذف القيم المكرره من الجدول
يعني نفترض اننا كرريتنا جدول كالاتي
create table emp (val_1 int,val_2 int,val_3 int)


insert into emp values (1,2,3)

وكررناها مثلا اي عدد
دلوقت لو جربنا الطريقه دي فعلا هتمسح القيم المكرره وتسيب raws واحد بس فيه القيم 1و2و3

delete from emp where rowid <> ( select max(rowid)
from emp a
where a.val_1 = emp.val_1 and a.val_2 = emp.val_2 and a.val_3 = emp.val3 )

ممكن شرح ليها

ممكن بطريقه تانيه وانا عرفها اللي هي

delete from emp where (rowid, val_1) not in (select min(rowid), val_1 from emp group by val_1);

تم التعديل بواسطة waleed.ita, 12 February 2009 - 02:07 AM.


#2 waleed.ita

waleed.ita

    عضو

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

تاريخ المشاركة 12 February 2009 - 04:07 PM

ايه يا جماعه محدش عارف ولا مستخسرين تشرحوها

#3 TROYMAN

TROYMAN

    مشترك

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

تاريخ المشاركة 14 February 2009 - 02:37 PM

السلام عليكم ورحمه الله وبركاته
كنت عاوز اعرف شرح الطريقه دي لاني مش فاهم معناها ايه بصراحه في حذف القيم المكرره من الجدول
يعني نفترض اننا كرريتنا جدول كالاتي

create table emp (val_1 int,val_2 int,val_3 int)


insert into emp values (1,2,3)

وكررناها مثلا اي عدد
دلوقت لو جربنا الطريقه دي فعلا هتمسح القيم المكرره وتسيب raws واحد بس فيه القيم 1و2و3

delete from emp where rowid <> ( select max(rowid)
from emp a
where a.val_1 = emp.val_1 and a.val_2 = emp.val_2 and a.val_3 = emp.val3 )

ممكن شرح ليها

ممكن بطريقه تانيه وانا عرفها اللي هي

delete from emp where (rowid, val_1) not in (select min(rowid), val_1 from emp group by val_1);



السلام عليكم...
بالنسبة للسؤال هو سؤال غير منطقي بالنسبة للمعطيات يلي حاططها.. لازم يكون في بالجدول مميز(مفتاح أساسي مثلاً) نقدر عن طريق نتحكم بالسجلات.
أما بالنسبة للحلين يلي حاططهون.. للأسف الحلين خاطئين..

delete from emp where rowid <> ( select max(rowid)
from emp a
where a.val_1 = emp.val_1 and a.val_2 = emp.val_2 and a.val_3 = emp.val3 )


هذا الحل صحيح فقط في حالة أن الجدول يحوي على نوع واحد من السجلات المكررة..يعني إذا كان الجدول يحوي على أكثر من مجموعة (1,2,3)&(4,5,6)
بيعطي نتائج خاطئة..وبدون ما تجربها مبينة..
متل مالك شايف بالكود..رح يجيب أكبر Rowid لنفس المجموعة حسب الكوريليتد و رح يحذف كلشي أصغر من هل الرقم حتى لو كان بغير مجموعة..لمّا يجي بدو يفوت بتاني كوريليتد ما حيلاقي سجلات يفحصها...

delete from emp where (rowid, val_1) not in (select min(rowid), val_1 from emp group by val_1);


كمان هاد غلط..
إذا بتحطلو مجموعتن من السجلات مشتركة بقيمة أول حقل بيحذف كل المجموعتين...
يعني جرب حطلو (1,2,3) & (1,2,4) ..
إذا كتير مضطر عليها..فيك تعملو بروسيدجر بسيط...
و السلام ختام...

تم التعديل بواسطة TROYMAN, 14 February 2009 - 02:39 PM.


<<اللهم لا علـم لنا إلا ما علّمتنا إنك أنت العليــم الحكيــم>>
<<اللهم علّمنا ما ينفعنا و انفعنا بما علّمتنا و ازدنا علماً>>



Programmer (C#.Net,C++,ASP) & Oracle Developer