![]() |
שאלת SQL: ניקוי טבלה מרשומות כפולות
אהלן,
צריך עזרה בשאילתא (סדרת שאילתות) נכונה לניקוי טבלה מרשומות כפולות. מה יש - 1. טבלת רשומות הכוללות את השדות "זיהוי משתמש" ו-"מספר רשימה" (יש רק משתמש יחידני ומספר רשימות שהוא יכול להיות רשום בהן). 2. קיים רישום של אותו "זיהוי משתמש" בכמה כניסות בטבלה ל-"מספרי רשימות" לא רצויים". מה צריך - לזהות את הרישומים הכפולים ולנקות אותם. אין לי בעיה להגדיר שמספר הרשימה למחיקה יהיה "10" לדוגמא. תודה מראש. |
אני לא בטוח שהבנתי, אבל נראה לי שהכי פשוט יהיה לך לעשות SELECT עם DISTINCT להכל, לנקות את הטבלה ולהכניס אליה את כל הנתונים/להכניס את כל הנתונים לטבלה אחרת (אם אתה מעדיף לא למחוק ישר).
|
ציטוט:
אני צריך לזהות כפילות של שדה מסויים (SUB_ID) במספר כניסות בטבלה. כאשר כול כניסה בטבלה מאופיינת ב-LIST_ID אחר (כלומר, אותו מזהה-משתמש מופיע בכמה רשימות). אחרי הזיהוי הזה אני צריך למחוק את הכניסה של ה-LIST_ID הלא רצוי. אין לי בעיה להגדיר את ה-LIST_ID למחיקה ו\או להריץ כמה סבבים של ניקוי וכול פעם להתייחס לצמד של LIST_ID'ים. השאלה - מה השאילתא הנכונה לזה? |
מההסבר שלך הפתרון שנתתי לך הוא כן נכון, אם אני מבין. תקן אותי אם אני טועה אבל מה שאתה מחפש זה להגיע מערכים שכאלו:
PHP קוד:
PHP קוד:
|
לא בדיוק, אבל בערך ... כלומר: אני לא רוצה ליצר רשימה חלקית אלא לנקות את הטבלה הקיימת.
כלומר, כרגע יש לי (ואני לא מציג את השדות הנוספים שיש בטבלה): PHP קוד:
PHP קוד:
|
יש כמה דרכים לפתור את זה, אתה יכול לשלוף את כל הSUB_IDים עם DISTINCT ואז לשלוף לכל אחד LIST_ID שזו הדרך הטיפשית,
אני ממליץ לך לשלוף הכל מסודר לפי SUB_ID ואז לעבור על הכל עם WHILE, ליצור משתנה עזר lastid ולשים בו כל פעם את הערך של השורה האחרונה, אם הערך הזה לא שווה לשורה הנוכחית להכניס את השורה למערך כלשהו. אח"כ תנקה את הטבלה. לבסוף תריץ שאילתות INSERT בשביל להכניס את הנתונים, או שאילתא אחת גדולה, או שתריץ מלא שאילתות DELETE בצורה נורא מורכבת. |
למה לא לשלוף כל פעם שורה אחת, ואז לבדוק אם היא קיימת במאגר, אם כן למחוק את השורה השניה שנמצאה וככה להמשיך.
|
זה לא שאתה לא צודק - אבל מבחינת סיבוכיות זה הפתרון הכי גרוע שיכול להיות ... תבין, יש לי כ-40K רשומות להריץ (ואז אתה מבקש ממני לבצע N! של זה ...).
|
כל הזמנים הם GMT +2. הזמן כעת הוא 21:04. |
מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ