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

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


waleed.ita

Recommended Posts

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

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
رابط هذا التعليق
شارك

السلام عليكم ورحمه الله وبركاته
كنت عاوز اعرف شرح الطريقه دي لاني مش فاهم معناها ايه بصراحه في حذف القيم المكرره من الجدول
يعني نفترض اننا كرريتنا جدول كالاتي
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
رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية