Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Доброго дня форумчане! Возникла срочная задача которую ввиду зелености пока не могу самостоятельно решить.

SQL2008 Имеется таблица: пусть будет - MUSH состоящая всего из трех столбцов и имеющая 35 записей:


login pass role
--------------------------------

| vasya | 1234 | user |
| petya | qwer | user |
| artur | zxcv | user |
| dima | dasd | user |
| vasya | 1234 | user | <----- удалить
--------------------------------

По ошибке в таблицу был внесен пользователь который уже там имелся, теперь эту строку нельзя ни отредактировать ни удалить.Дубликат всего один строка 35 дублируется со строкой 13.
Уникального поля по которому хоть как-то можно было идентифицировать нету (столбца id).

Подскажите пожалуйста самый простой и рабочий способ.

Все найденные мною статью в нете представляли собой монструозные запросы с выборкой множества дубликатов, создания дополнительной таблицы итд.
Простого решения подходящего мне я не нашел (
9 окт 19, 13:00    [21990317]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36456
delete a from MUSH a where  login = ... and pass = ... and role ...
insert MUSH select login = ... , pass = ... , role ...
9 окт 19, 13:05    [21990323]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
court
Member

Откуда:
Сообщений: 1797
Hinamura,

with cte as (
  select *, row_number()over(partition by login /*,pass,role*/ order by (select 1)) as rn from MUSH 
)
delete from cte where rn > 1
9 окт 19, 13:11    [21990330]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6791
Hinamura,

delete top (1) ...
9 окт 19, 13:23    [21990348]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Владислав Колосов,

delete top(1)

Я так понимаю это запрос удалит самую первую строку в таблице? В моем случае мне нужно удалить 35ю.
9 окт 19, 13:34    [21990361]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36456
Hinamura,

Удалит самую первую строку в таблице, которая удовлетворяет условиям. Условия сами сообразите напиать?
9 окт 19, 13:35    [21990363]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1086
Hinamura
Владислав Колосов,

delete top(1)

Я так понимаю это запрос удалит самую первую строку в таблице? В моем случае мне нужно удалить 35ю.

самую первую не из таблицы, а из запроса, который вы ограничите условием where. ну если не ограничите - тогда, конечно, первую в таблице...
Но лучше воспользуйтесь предложением от court, предварительно проверив, что должно удалиться - для этого замените delete на select *
9 окт 19, 13:36    [21990369]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Гавриленко Сергей Алексеевич,

Я не понял вашего ответа.
Если я не ошибасю, то с помощью вашего запроса я не смогу удалить строку нужную, т.к. по всем столбцам совпадает с уже имеющейся.
9 окт 19, 13:40    [21990375]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46858
Minamoto
Hinamura
Владислав Колосов,

delete top(1)

Я так понимаю это запрос удалит самую первую строку в таблице? В моем случае мне нужно удалить 35ю.

самую первую не из таблицы, а из запроса, который вы ограничите условием where. ну если не ограничите - тогда, конечно, первую в таблице...
В таблице нет первой записи!
9 окт 19, 13:40    [21990376]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Господа я полный ноль в написании запросов, предложите рабочий скрипт где нужно ничего исправлять добавлять условия итд.
9 окт 19, 13:42    [21990380]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
1C Developer
Member

Откуда:
Сообщений: 41
Hinamura
Гавриленко Сергей Алексеевич,

Я не понял вашего ответа.
Если я не ошибасю, то с помощью вашего запроса я не смогу удалить строку нужную, т.к. по всем столбцам совпадает с уже имеющейся.


Сделайте полный бекап перед операцией и убедитесь, что он рабочий!
9 окт 19, 13:42    [21990382]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36456
Hinamura
Господа я полный ноль в написании запросов, предложите рабочий скрипт где нужно ничего исправлять добавлять условия итд.
Если вы полный ноль, то как вы поймете, что предложенный крипт правильный и не удалит вам, скажем, все записи в таблице?
9 окт 19, 13:44    [21990385]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1086
iap
В таблице нет первой записи!

А DBCC PAGE мне говорит, что есть :)

Я согласен с вами, что нельзя однозначно определить, какая строка будет возвращена первой и удалена, но какая-то все равно будет.
9 окт 19, 13:53    [21990399]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6791
Hinamura,

написано всё выше

delete top (1) from MUSH a where  login = ... and pass = ... and role ...
9 окт 19, 14:01    [21990412]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Владислав Колосов,

Ваш скрипт выдает Incorrect syntax near the keyword 'from'
9 окт 19, 14:15    [21990434]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
SQL2016

Все предложенные варианты выдают синтаксические ошибки
9 окт 19, 14:23    [21990449]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
ЕвгенийВ
Member

Откуда: Москва
Сообщений: 4814
а в ssms никак не удалить?
9 окт 19, 14:27    [21990456]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1086
Hinamura
SQL2016

Все предложенные варианты выдают синтаксические ошибки


delete top (1) FROM a from #MUSH a where  login = 'vasya'
9 окт 19, 14:29    [21990458]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Yasha123
Member

Откуда:
Сообщений: 1562
Hinamura
SQL2016

Все предложенные варианты выдают синтаксические ошибки

значит, база в совместимости 80 и ей не светит row_number,
а топ только если без скобок.
короче, реализуйте вариант Гавриленко, он везде катит
9 окт 19, 14:29    [21990459]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Minamoto,

Выдает incorrect syntax near '='

Но на select работает
9 окт 19, 14:36    [21990465]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Yasha123,

База в режиме совместимости sql2008(100)

Вариант Гавриленко сыплет ошибками (я с delete пока не тороплюсь правда - вставляю select)

Зы. А что, если я руками через ssms руками добавлю столбец еще один с нумерацией, чтобы у дубликата появилось уникальное поле, потом удалю дубликат и после удалю столбец за ненадобностью?
9 окт 19, 14:41    [21990477]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
invm
Member

Откуда: Москва
Сообщений: 8797
set rowcount 1
delete from MUSH where login = ... and pass = ... and role = ...
set rowcount 0
9 окт 19, 14:43    [21990478]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 6791
invm,

он так и пишет - с точками. Не догадывается значения указать.
9 окт 19, 14:44    [21990481]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

Откуда:
Сообщений: 11
Владислав Колосов,

Я пишу
Set rowcount 1
delete from mush where login = 'vasya' and pass = '1234' and role = 'user'
Set rowcount 0

Выдает: incorrect syntax near the keyword 'from'
9 окт 19, 14:52    [21990497]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36456
Тяжелый случай... Раз буквы в запросе не понятны, их надо взять и выкинуть, так, да?
9 окт 19, 14:53    [21990500]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить