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

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

صورة
- - - - -

إستعلام يحذف السجلات المتكررة


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

#1 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 April 2006 - 08:41 AM

هل هناك إستعلام يحذف السجلات المتكررة
بحيث يحذف السجل المتكرر فقط
فلو كان هناك سجل متكرر
1925 ادارة بيانات جيد
1925 ادارة بيانات جيد
فبعد الأستعلام يكون هناك سجل واحد فقط
1925 ادارة بيانات جيد

#2 bogii

bogii

    عضو

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

تاريخ المشاركة 26 April 2006 - 11:01 AM

لا بد من وجود Primay Key لتمييز السجلات المطلوب حذفها
مثال إذا افترضنا ان الجدول Tو اسماء الحقول كالتالي
DESC- F1- id
------------------------
1 1925 ادارة بيانات جيد
2 1925 ادارة بيانات جيد

بالتالي يمكن حذف جميع السجلات المكرره والبقاء علي سجل واحد فقط كالتالي
delete from T where id in(select id from T where id not in
(select min(id) from T group by F1))

تم التعديل بواسطة bogii, 26 April 2006 - 11:03 AM.


#3 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 April 2006 - 11:51 AM

شكرا ياbogii
ولكن الى الان لم أعرف طريقة عمل الاستعلام
اذا ممكن تشرح عمل الاستعلام أكون لك من الشاكرين

#4 bogii

bogii

    عضو

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

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

اليك الشرح

الجزء الرئيسي في الاستعلام عمل select لل IDs للسجلات المطلوب الاحتفاظ بها وعدم ومسحها وهي سجل واحد من كل مجموعه مكرره
select min(id) from T group by F1
حيث ان F1 هو اسم الحقل الذي يتم تكراره وهوا كما ذكرت في مثالك= 1925


ثم يأتي بقية الاستعلام بحذف كل السجلات من الجدول فيما عدا من بها IDs التي تحتوي علي سجلات غير مكرره والتي حصلنا عليها من الخطوه
السابقه
delete from T where id in(select id from T where id not in
(select id from T where id not in(select min(id) from T group by F1))

#5 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

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

شكرا جزيلا لك على مساعدنك وتجاوبك معي يا غالي
بس الاستعلام لم يحذف أي سجل
لا أدري لماذا؟

تم التعديل بواسطة a5hhk, 26 April 2006 - 01:27 PM.


#6 m_nasef

m_nasef

    مشترك

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

تاريخ المشاركة 26 April 2006 - 02:02 PM

delete from tb
where (num,desc) in 
(select num,desc
from tb
minus
select distinct num,desc
from tb);
حيث num,desc هما السجلات المراد حذف التكرار فيهم ........

#7 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 April 2006 - 02:37 PM

يا أخي m_nasef
أيضا الكود لم يعمل

#8 llord

llord

    مشترك

  • الأعضــاء
  • 114 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 April 2006 - 06:20 PM

السلام عليكم

==========
لحذف السجلات المكررة
اعتقد انى قد رأيت هذه المشاركة من قبل
ولكن مش متذكر
==========
المهم
خد الطريقة دى وان شاء الله تشتغل

DELETE FROM my_table 
 WHERE ROWID NOT IN (SELECT MIN(ROWID) 
                       FROM my_table 
                      GROUP BY delete_col_name);
Ex:-
delete duplicate row of emp table that have the same empno

DELETE FROM emp 
  WHERE ROWID NOT IN (SELECT MIN(ROWID) FROM emp GROUP BY empno);

وبالتوفيق للجميع
:P :D

#9 عبدالله ندا

عبدالله ندا

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

  • المجموعة الماسية
  • 1,017 مشاركة
  • الاسم الأول:عبدالله
  • اسم العائلة:ندا
  • البـلـد: Country Flag
  • المنصب الحالي:Technical Applications Manager

تاريخ المشاركة 26 April 2006 - 06:53 PM


DELETE "table name"

WHERE  rowid In( SELECT LEAD(rowid) OVER (PARTITION BY  "coloumn name" ORDER BY rowid )

FROM   "table name" );


في زمننا هذا .........................
ليس هناك قلب ناصع البياض ...
ولا قلب قاتم السواد ...
ولكن دائما
BLACK&WHITE

 

مع تحياتي
عبدالله ندا

http://anada.4shared.com

abdallahnada@hotmail.com 


#10 hany1900

hany1900

    عضو

  • الأعضــاء
  • 43 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 28 April 2006 - 01:39 AM

السلام عليكم
اظن انه يمكن استخدام التالي
مثلا لخدف صف متكرر ف جدول الـ Emp
Name Id
1925 مرسي محمد
1925 مرسي محمد
يمكن عمل التالي
delete from emp M
where id in ( select id
from emp
where (select count(*) from emp
where id = M.id) >1

و هجربها ان شاء الله وارد عليكو
لأني اظن ان كمان فيه طريقة اسرع من الـ subquery دي
و شكرا

تم التعديل بواسطة hany1900, 28 April 2006 - 01:41 AM.

[وسط][وسط]خيركم من تعلم العلم و علمه





موضوعاتي[/وسط]
Make report out on printer[/وسط]


كيفية عمل ريبورت سطر و سطر ( يا شباب لقيت الحل)

كتاب جامد جدا ف الـ Reports


اسهل الطرق لفهم و تصميم قواعد البيانات Data Modeling


#11 hanospace

hanospace

    عضو

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

تاريخ المشاركة 28 April 2006 - 06:47 PM

إليك هذا الاستعلام البسيط


<delete from <table_name a
where rowid < (select max(rowid) from <table_name b> where a.<column_name> = b.<column_name > ); f

#12 a5hhk

a5hhk

    عضو نشط

  • الأعضــاء
  • 345 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 29 April 2006 - 10:34 AM

شكرا لكم جميعا على هذه الحلول الرائعة والتي أدت الى النتيجة المطلوبة

#13 m_nasef

m_nasef

    مشترك

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

تاريخ المشاركة 29 April 2006 - 02:45 PM

فى الاستعلام السابق
---------------------
DELETE "table name"
WHERE rowid In( SELECT LEAD(rowid) OVER (PARTITION BY "coloumn name" ORDER BY rowid )
FROM "table name" );
---------------------
ما معنى PARTITION BY / OVER / LEAD ؟؟؟؟

#14 Wise

Wise

    عضو نشط

  • الأعضــاء
  • 416 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 26 May 2009 - 02:06 PM

كود سهل و بسيط جزاكم الله خيرا
اللهم اقسم لنا من خشيتك ما تحول به بيننا و بين معصيتك ..
ومن طاعتك ما تبلغنا به جنتك ..
و من اليقين ما تهون به علينا مصائب الدنيا..




مواضيعي

-----------

مشروع المخازن و فواتير مشتريات و مبيعات و حسابات عملاء و موردين
----------------------------------------------------------------------
تحليل مشروع المخازن و حسابات العملاء والموردين