none
מחיקת פריטים שאין להם אבא RRS feed

  • שאלה

  • שלום 

    יש לי טבלה בשם ITEM שכל פריט בה יש לו ערך InvetoryId.

    חלק מהITEMS משויכים לInvetory שלא קיים לכן ברצוני למחוק אותם.

    הקוד הבא לא עובד לי אשמח לדעת מדוע זה לא עובד ומה אפשר כן לעשות

    DELET FROM Item it Left JOIN Inventory i ON i.InventoryId = it.InventoryId
    WHERE i.InventoryId = NULL

    יום ראשון 05 אוגוסט 2012 14:11

תשובות

  • מעבר להערותיו המועילות של יוסי, לי עצמי יש רתיעה מפעולות מחיקה או עדכון של Join למיניהם
    שגורמות לי לחשוש שימחקו נתונים מהטבלה הלא נכונה
    או שפעולת העדכון תיכשל בגלל שה-Join אינו עדכין (UnUpdatable).

    ליתר בטחון, בהירות ויעילות הייתי נוהג כך:

    Delete 
    From Item 
    Where InventoryId Not In (Select InventoryId From Inventory);


    Blog: http://about.me/GeriReshef


    • נערך על-ידי Geri_Reshef יום ראשון 05 אוגוסט 2012 19:25
    • סומן כתשובה על-ידי yspo יום ראשון 05 אוגוסט 2012 20:26
    יום ראשון 05 אוגוסט 2012 16:53

כל התגובות

  • היי,

    דבר ראשון, בתנאי המחיקה יש שימוש ב- i.InventoryId = NULL. כלל חשוב: NULL אף פעם לא שווה ל- NULL  אלא אם התכונית הנקראת SET ANSI_NULLS מופעלת. רק לשם ההמחשה, תחליף את פקודת ה- DELETE ב- SELECT. פעם אחת תריץ עם התנאי כמו שהוא כרגע: WHERE i.InventoryId = NULL ואז מיד לאחר מכן תריץ עם התנאי הבא:  WHERE i.InventoryId IS NULL  ותראה אם חוזרות לך תוצאות מהשאילתה (הערה: ככלל זה Good Practice להריץ פקודת SELECT לפני הרצת פקודת DELETE, אתה יודע, למנוע טעויות מיותרות.....). אחר כך תחזיר את פקודת ה- DELETE, אם עדיין תקבל הודעת שגיאה כלשהי, תצרף אותה לפה בבקשה, על מנת שנוכל לעזור לך בצורה יותר ממוקדת.

    תודה רבה מראש,

    יוסי חקיקת

    • הוצע כתשובה על-ידי EitanBlumin יום ראשון 05 אוגוסט 2012 14:38
    יום ראשון 05 אוגוסט 2012 14:27
  • מעבר להערותיו המועילות של יוסי, לי עצמי יש רתיעה מפעולות מחיקה או עדכון של Join למיניהם
    שגורמות לי לחשוש שימחקו נתונים מהטבלה הלא נכונה
    או שפעולת העדכון תיכשל בגלל שה-Join אינו עדכין (UnUpdatable).

    ליתר בטחון, בהירות ויעילות הייתי נוהג כך:

    Delete 
    From Item 
    Where InventoryId Not In (Select InventoryId From Inventory);


    Blog: http://about.me/GeriReshef


    • נערך על-ידי Geri_Reshef יום ראשון 05 אוגוסט 2012 19:25
    • סומן כתשובה על-ידי yspo יום ראשון 05 אוגוסט 2012 20:26
    יום ראשון 05 אוגוסט 2012 16:53
  • תודה רבה לך עזרת לי מאוד.


    יום ראשון 05 אוגוסט 2012 20:28