מחיקת נתונים כפולים SQL SERVER 2008

danymaor

New member
מחיקת נתונים כפולים SQL SERVER 2008

יש לי בסיס נתונים עם 4500 שורות ו-3 עמודות
אין לי מפתח ראשי ועכשיו אני רוצה ליצור אחד כדי להימנע מכפל של נתונים בעמודה מסויימת.
אני רוצה לבצע חיפוש של נתונים כפולים ואז למחוק אותם (את כולם או להשאיר אחד מכל נתון כפול (לא לחוץ לי))

אחת העמודות שמכילות 4500 שורות יש לי בערך 4400 נתונים ועוד 100 כפולים. מה שאני רוצה לעשות זה למחוק את כל השורות שיש לי נתון כפול בעמודה מסויימת.
איך ניתן לעשות את זה או לפחות איך ניתן רק להציג נתונים כפולים לפי עמודה מסויימת ואז אני יעשה את זה בצורה ידאנית
 

rnan

New member
מממ

|הקוד


Try this -
if you dont have id , just choose an arbitrary column


WITH CTE AS (
SELECT rn
rownumber() OVER (PARTITION BY userId,productid ORDER BY id) AS rn
FROM tbl
)
DELETE FROM tbl
FROM CTE
WHERE tbl.rn = CTE.rn
AND CTE.rn > 1
 

rnan

New member
* תיקון בעיית ישור

Try this -
if you dont have id , just choose an arbitrary column


WITH CTE AS (
SELECT rn
rownumber() OVER (PARTITION BY userId,productid ORDER BY id) AS rn
FROM tbl
)
DELETE FROM tbl
FROM CTE
WHERE tbl.rn = CTE.rn
AND CTE.rn > 1
 

גרי רשף

New member


אפשר למחוק ישר מה-CTE:
WITH CTE AS (
SELECT rn
rownumber() OVER (PARTITION BY userId,productid ORDER BY id) AS rn
FROM tbl)
DELETE
FROM CTE
WHERE CTE.rn > 1
 

rnan

New member
יפה ,,,, תודה לא ידעתי שאפשר למחוק ישירות משם

 
למעלה