SQL для удаления определенных строк из выбора - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть стол:

UserA UserB UserBB UserAA

например:

1 2 2 1
1 3 3 1
2 1 1 2
2 4 4 2
2 5 5 2
5 2 2 5

Чего я хочу добиться - это удалить строки (дубликаты), например, оставить только строки, как в примере:

1 2 2 1
1 3 3 1
2 4 4 2
2 5 5 2



2 1 1 2 -> deleted because there is already 1 2 2 1 
5 2 2 5 -> deleted because there is already 2 5 5 2

Как написать такой запрос?

Спасибо за помощь

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

- Найти повторяющиеся строки

SELECT  MAX(ID) as ID, CustName, Pincode FROM #Customers
GROUP BY CustName, Pincode
HAVING COUNT(*) > 1

- Удалить повторяющиеся строки

DELETE FROM #Customers
WHERE ID IN 
( SELECT    MAX(ID) FROM #Customers
GROUP BY CustName, Pincode
HAVING COUNT(*) > 1)

Взято из MSDN.: http://archive.msdn.microsoft.com/SQLExamples/Wiki/View.aspx?title=DuplicateRows

Дайте мне знать, если вы не можете понять это из этого кода.

Это может быть немного ближе к вашим потребностям.:

DELETE FROM TABLE
WHERE USERA IN ( SELECT MAX(USERA) FROM TABLE
GROUP BY USERA, USERB, USERBB, USERAA HAVING COUNT(*) > 1)
0 голосов
/ 18 ноября 2011

Достаточно было просто добавить:

Где UserA

0 голосов
/ 18 ноября 2011

Ниже также рассматриваются ситуации, когда UserA и UserB равны между двумя строками, но UserAA и UserBB переключаются и наоборот.Ваш вопрос немного неясен о том, что именно является дубликатом.Надеюсь, это, по крайней мере, направит вас в правильном направлении.

Сначала я бы превратил это в оператор SELECT и убедился бы, что он возвращает строки, которые, по вашему мнению, должны быть удалены, и только тестроки.

DELETE T1
FROM
    My_Table T1
INNER JOIN My_Table T2 ON
    (
        T2.UserA = T1.UserA AND
        T2.UserB = T1.UserB AND
        T2.UserAA = T1.UserBB AND
        T2.UserBB = T1.UserAA AND
        T2.UserAA < T2.UserBB
    ) OR
    (
        T2.UserA = T1.UserB AND
        T2.UserB = T1.UserA AND
        T2.UserAA = T1.UserAA AND
        T2.UserBB = T1.UserBB AND
        T2.UserA < T2.UserB
    ) OR
    (
        T2.UserA = T1.UserB AND
        T2.UserB = T1.UserA AND
        T2.UserAA = T1.UserBB AND
        T2.UserBB = T1.UserAA AND
        T2.UserA < T2.UserB
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...