MySQL ڈپلیکیٹ قطاروں کو کیسے حذف کرتا ہے۔

How Mysql Delete Duplicate Rows



مائی ایس کیو ایل ایک رشتہ دار ڈیٹاسیٹ ہے جو ڈیٹا کو ان ٹیبلز میں محفوظ کرتا ہے جن میں قطاریں اور کالم ہوتے ہیں۔ تاہم ، ڈیٹا بیس میں محفوظ کردہ ڈیٹا میں ایپلی کیشنز یا صارفین کی غلطیوں کی وجہ سے ڈپلیکیٹ ویلیوز ہو سکتی ہیں۔

اس ٹیوٹوریل میں ، ہم سیکھیں گے کہ MySQL ڈیٹا بیس میں ڈپلیکیٹ قطاروں کو کیسے ہٹایا جائے تاکہ ڈیٹا بیس کا سائز کم کیا جا سکے اور سرور کی کارکردگی بڑھانے میں مدد مل سکے۔







جاری رکھنے سے پہلے ، ہم فرض کر رہے ہیں:



  1. آپ کے سسٹم پر MySQL انسٹال اور چل رہا ہے۔
  2. آپ کو ڈیٹا بیس تک جڑ تک رسائی حاصل ہے۔
  3. آپ کو تجربہ یا جانچ کے لیے ڈیٹا بیس تک رسائی حاصل ہے۔

نوٹ : اگر آپ کو اس گائیڈ میں فراہم کردہ تصورات کو آزمانے کے لیے نمونہ ڈیٹا بیس کی ضرورت ہے تو ، براہ کرم سکیلا ڈیٹا بیس پر غور کریں یا اس گائیڈ میں استعمال ہونے والے ڈیٹا بیس کی ایک کاپی ڈاؤن لوڈ کریں۔



وسائل ذیل میں دیے گئے ہیں:





بنیادی استعمال۔

اس سے پہلے کہ ہم شروع کریں ، ہم جان بوجھ کر ٹیسٹنگ کے مقاصد کے لیے ڈپلیکیٹ اقدار پر مشتمل ٹیبل بنائیں گے۔ اس عمل کو انجام دینے کے لیے SQL سوالات ذیل میں ہیں:

استعمال کریں۔ دنیا؛
ڈراپ ٹیبل اگر موجود صارفین؛
بنانا ٹیبل صارفین(آئی ڈی INT بنیادی چابی نہیں خالی خودکار اضافہ ،صارف نام ورچار (10۔) نہیں خالی ،پورا نام ورچار (بیس)،ای میل ورچار (255۔) نہیں خالی )؛
داخل کریں INTO صارفین(صارف نام،پورا نام،ای میل) قیمتیں
('کنیا'، 'کلاڈ ایم موری'، '[ای میل محفوظ]')،
('دبائیں'، 'ٹفنی جی بیلی'، '[ای میل محفوظ]')،
('راکٹ'، 'کرسٹوفر ایس پائٹن'، '[ای میل محفوظ]')،
('خفیہ معاملات'، 'پیٹریسیا جے فاکس'، '[ای میل محفوظ]')،
('مضمون'، 'فائے ایچ ہارٹلے'، '[ای میل محفوظ]')،
('خفیہ معاملات'، 'پیٹریسیا جے فاکس'، '[ای میل محفوظ]')،
('راکٹ'، 'کرسٹوفر ایس پائٹن'، '[ای میل محفوظ]')،
('آرٹیمیس'، 'ویزلی سی دلارڈ'، '[ای میل محفوظ]')؛

اپنی ضروریات کو پورا کرنے کے لیے مذکورہ بالا سوال میں ترمیم کریں۔ آپ کو یہ بھی یقینی بنانا چاہیے کہ آپ کے پاس ڈیٹا بیس (دنیا) ہے جو غلطیوں سے بچنے کے لیے بنایا گیا ہے۔



اب ، اگر ہم ٹیبل کے اندر اور صارف نام کے لحاظ سے تمام ڈیٹا حاصل کرتے ہیں تو ، ہم اپنے پاس موجود نقول دیکھیں گے جیسا کہ دکھایا گیا ہے:

mysql> استعمال دنیا؛
ڈیٹا بیس۔ تبدیل کر دیا
mysql> منتخب کریں * سے صارفین آرڈر بائی۔ صارف نام؛
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔
|آئی ڈی|صارف نام|پورا نام|ای میل|
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔
| |آرٹیمیس|ویسلے سی دلارڈ۔|[ای میل محفوظ]|
| |خفیہ معاملات|پیٹریشیا جے فاکس|[ای میل محفوظ]|
| |خفیہ معاملات|پیٹریشیا جے فاکس|[ای میل محفوظ]|
| |دبائیں|ٹفنی جی بیلی|[ای میل محفوظ]|
| |مضمون|فائے ایچ ہارٹلے۔|[ای میل محفوظ]|
| |راکٹ|کرسٹوفر ایس پیٹن۔|[ای میل محفوظ]|
| |راکٹ|کرسٹوفر ایس پیٹن۔|[ای میل محفوظ]|
| |کنیا|کلاڈ ایم موری|[ای میل محفوظ]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔

جیسا کہ آپ اوپر کی میز سے دیکھ سکتے ہیں ، ہمارے پاس دو ڈپلیکیٹ اقدار ہیں جو ڈیٹا بیس کو بغیر کسی وجہ کے بڑا بناتی ہیں اور سست رفتار کا سبب بنتی ہیں۔

آئیے اب سیکھیں کہ ہم ان اقدار کو کیسے دور کر سکتے ہیں۔

#1 - شمولیت حذف کریں۔

ڈیٹا بیس میں ڈپلیکیٹ قطاروں کو ہٹانے کا ایک طریقہ MySQL DELETE JOIN بیان استعمال کرنا ہے۔ سوال ، تاہم ، ڈپلیکیٹ اقدار کو ہٹانے کے لیے آئی ڈی کا استعمال کرتا ہے۔

مثال کے طور پر ، مندرجہ بالا یوزر ٹیبل میں ڈپلیکیٹ اقدار کو ہٹانے کے لیے ، ہم ان پٹ کر سکتے ہیں:

حذف کریں ٹیبل 1۔ سے صارفین کی میز 1۔ اندرونی شامل ہوں صارفین کی میز 2۔ کہاں table1.id<table2.id اور table1.email=table2.email؛

ایک بار جب آپ مندرجہ بالا استفسار پر عمل کرتے ہیں تو ، آپ ڈپلیکیٹ اقدار کو ہٹا دیں گے جیسا کہ ذیل میں آؤٹ پٹ میں دکھایا گیا ہے۔

mysql> حذف کریں ٹیبل 1۔ سے صارفین کی میز 1۔ اندرونی شامل ہوں صارفین کی میز 2۔ کہاں table1.id<table2.id اور table1.email=table2.email؛
استفسار ٹھیک ہے۔، قطاریں متاثر(0.01۔سیکنڈ)

mysql> منتخب کریں * سے صارفین آرڈر بائی۔ صارف نام؛
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔
|آئی ڈی|صارف نام|پورا نام|ای میل|
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔
| |آرٹیمیس|ویسلے سی دلارڈ۔|[ای میل محفوظ]|
| |خفیہ معاملات|پیٹریشیا جے فاکس|[ای میل محفوظ]|
| |دبائیں|ٹفنی جی بیلی|[ای میل محفوظ]|
| |مضمون|فائے ایچ ہارٹلے۔|[ای میل محفوظ]|
| |راکٹ|کرسٹوفر ایس پیٹن۔|[ای میل محفوظ]|
| |کنیا|کلاڈ ایم موری|[ای میل محفوظ]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔

#2 - Row_Number () فنکشن۔

دوسرا طریقہ جسے ہم لاگو کر سکتے ہیں وہ ہے MySQL row_number () فنکشن کا استعمال کرنا۔ یہ فنکشن MySQL ورژن 8 اور اس سے زیادہ میں معاون ہے۔

یہ ہر قطار میں ایک ترتیب وار قدر مقرر کرکے کام کرتا ہے ، قطاریں جس میں ڈپلیکیٹ اقدار ہوتی ہیں 1 سے زیادہ قیمت حاصل کرتی ہیں۔

اس فنکشن کے بارے میں مزید جاننے کے لیے ، نیچے دیے گئے ریسورس کا استعمال کریں:

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number

مندرجہ ذیل سوال پر غور کریں جو ڈپلیکیٹ اقدار کے ساتھ قطاروں کی آئی ڈی لوٹاتا ہے۔

منتخب کریں آئی ڈی سے ( منتخب کریں آئی ڈی،ROW_NUMBER()پر( حصہ بذریعہ صارف نام۔ آرڈر بائی۔ صارف نام) اے ایس row_var سے صارفین)t1 کہاں row_var> ؛

ایک بار جب آپ مندرجہ بالا استفسار پر عمل کرتے ہیں تو ، آپ کو آئی ڈی کی فہرست ملنی چاہیے جیسا کہ ذیل میں آؤٹ پٹ میں دکھایا گیا ہے۔

+ ---- +۔
|آئی ڈی|
+ ---- +۔
| |
| |
+ ---- +۔
قطاریں میں سیٹ (0.01۔سیکنڈ)

اگر آپ اقدار کو ہٹانا چاہتے ہیں تو ، صرف SELECT بیان کو DELETE بیان سے تبدیل کریں جیسا کہ ذیل میں دکھایا گیا ہے۔

حذف کریں سے صارفین کہاں آئی ڈی IN ( منتخب کریں آئی ڈی سے ( منتخب کریں آئی ڈی،ROW_NUMBER()پر( حصہ بذریعہ صارف نام۔ آرڈر بائی۔ صارف نام) اے ایس row_var سے صارفین)t1 کہاں row_var> )؛

آخر میں ، آپ تصدیق کر سکتے ہیں کہ ڈپلیکیٹ اقدار کو SELECT بیان کا استعمال کرتے ہوئے ہٹا دیا گیا ہے۔

mysql> منتخب کریں * سے صارفین آرڈر بائی۔ صارف نام؛
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔
|آئی ڈی|صارف نام|پورا نام|ای میل|
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔
| |آرٹیمیس|ویسلے سی دلارڈ۔|[ای میل محفوظ]|
| |خفیہ معاملات|پیٹریشیا جے فاکس|[ای میل محفوظ]|
| |دبائیں|ٹفنی جی بیلی|[ای میل محفوظ]|
| |مضمون|فائے ایچ ہارٹلے۔|[ای میل محفوظ]|
| |راکٹ|کرسٹوفر ایس پیٹن۔|[ای میل محفوظ]|
| |کنیا|کلاڈ ایم موری|[ای میل محفوظ]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +۔

نتیجہ

اس ٹیوٹوریل میں ، ہم نے ڈیٹا بیس سے ڈپلیکیٹ اقدار کو ہٹانے کے دو طریقوں پر تبادلہ خیال کیا۔ بڑے ڈیٹا بیس ، خاص طور پر جو عام استعمال میں ہیں ، بیرونی درآمدات اور دیگر غلطیوں سے کئی ڈپلیکیٹ اقدار پر مشتمل ہو سکتے ہیں۔ لہذا ، ڈپلیکیٹ اقدار کو صاف کرنے کی ضرورت ہے تاکہ یہ یقینی بنایا جا سکے کہ ایپلی کیشنز بہتر کارکردگی کا مظاہرہ کرتی ہیں۔