الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حذف الاسطر المتكررة في الداتا بيس

بدأه صاحبة السمو في 22 أغسطس 2008 · 7 رد · 2,014 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اخواني الكرام

لدي داتا بيس من نوع my sql

تحتوي على بيانات

واقوم باستيراد بيانات بشكل شهري من اكسيل اليه

فهل يوجد طريقه لحذف الاسطر المتكرره في الجدول

علما انني عندما استخدم قاعدة البيانات اكسيس لحذف الاسطر المتكرره اكتب الكود التالي

"DELETE * FROM in_out AS E WHERE E.log_no > (SELECT MIN(X.log_no)  FROM in_out as X WHERE E.id = X.id and  E.date = X.date and  E.time = X.time and  E.state = X.state)"

ولكن مع mysql

للاسف يرجع رساله غريبه وهي كالتالي

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '* FROM in_out AS E WHERE E.log_no > (SELECT MIN(X.log_no) FROM in_out as X WHER' at line 1

فهل هناك حل لهذه المشكلة

1145392391.gif
#2

الاخ الكريم

احذف النجمة التي بعد DELETE

ارجو ان يكون الحل صحيح

#3

للاسف لم ينجح الحل معي

1145392391.gif
#4

اليس هناك اعضاء في هذا المنتدي؟؟

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

1145392391.gif
#5

استخدمي Procedure افضل و اسهل لان حسب علمي ال SubQuery في ال MySQL لا يدعم ال Updata, Delete

	Select MIN(X.log_no) INTO VarMin FROM in_out AS E,  in_out as X WHERE E.id = X.id and  E.date = X.date and  E.time = X.time and  E.state = X.state);
	Delete From in_out WHERE log_no  > VarMin;
#6

هذا هو الكود جاهز

و قد تم تجربته

Delete a.* from in_out_copy as a
inner join (
Select id , date , time , state , MIN(log_no) as nID
From in_out_copy
Group by id, date, time, state
Having Count(*) > 1
) as b on a.id = b.id  And a.date = b.date And a.time = b.time And a.state = b.state And b.nID <> a.log_no

تم تعديل هذه المشاركة بواسطة Slayer666 في 20 سبتمبر 2008 في 18:32

#7

ماشاء الله تبارك الله

الله يزيدك من علمه إن شاء الله

الصراحه نجح معي الحل وهذا من بعد شهر وانا احاول باكثر من طريقه

ولكن

هل من الممكن ان تقوم بقليل من الشرح

للكود

لكي استفيد واتعلم

على الاقل اشرح الاختصارات

شكرا اخي الكريم والله يزيدك من علمه إن شاء الله

1145392391.gif
#8

في البداية حاولت ان اعمل Procedure يقوم بالمطلوب لان ال Delete لا تدعم ال SubQuery

ولكن بالصدفة وجدت هذا الموضوع

JOIN works for UPDATE/DELETE

ثم ظهرت لي مشكلة و هي اني احذف جميع الاسطر المكررة بمعنى لا يبقى اي سطر من الاسطر المكرر :(

ولكن وجد الحل في هذا الموضوع اضغط هنا :lol:

هنا قامت العضوة بطرح سؤال ضم الكود التي تسئل عنه كان

SELECT MIN(X.log_no)  FROM in_out as X

و كما سوف ترون هنا استفد منه لترك سطر من الاسطر المكررة

الان لنشرح قليلا عن الكود

السطر الاول هو عملية حذف عادية

Delete a.* from in_out_copy as a

يقاطعها الJoin

وقمت بعمل Group by لجميع الاعمدة التي تتكرر بشرط كل مجموعة يجب ان تحتوي على اكثر من سطر و هنا فائدة ال Having

inner join (
Select id , date , time , state , MIN(log_no) as nID
From in_out_copy
Group by id, date, time, state
Having Count(*) > 1

as b on a.id = b.id  And a.date = b.date And a.time = b.time And a.state = b.state And b.nID <> a.log_no

هذه عملية مقارنة عادية لجلب المكرر

اما بالنسبة لل MIN(log_no) as nID

هنا يعيد قيمة اقل سطر في المجموعة حتى يتم مقارنته مع العامود log_ID

b.nID <> a.log_no خذف فقط الاسطر التي لا تسوي اقل قيمة للمجموعة

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…