Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Удаление 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
Сообщений: 36450
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

Откуда:
Сообщений: 6788
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
Сообщений: 36450
Hinamura,

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

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

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

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

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

Откуда:
Сообщений: 6788
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

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

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

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


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

Откуда:
Сообщений: 1553
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

Откуда:
Сообщений: 6788
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
Сообщений: 36450
Тяжелый случай... Раз буквы в запросе не понятны, их надо взять и выкинуть, так, да?
9 окт 19, 14:53    [21990500]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Владислав Колосов
Member

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

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

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

Щас еще выяснится, что там MySQL какой-нибудь. Хотя сообщение об ошибке майкрософтовское.
9 окт 19, 15:11    [21990542]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

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

О чем речь вообще?

Я так понимаю ошибки из-за несовместимости синтаксиса.

К примеру если писать
select top (1) from mash where login = 'vasya'
то уже лезет ошибка

Если
select top (1) login = 'vasya' from [omega].[dbo].[MUSH] то работает
9 окт 19, 15:12    [21990545]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Minamoto
Member

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

О чем речь вообще?

Я так понимаю ошибки из-за несовместимости синтаксиса.

К примеру если писать
select top (1) from mash where login = 'vasya'
то уже лезет ошибка

Если
select top (1) login = 'vasya' from [omega].[dbo].[MUSH] то работает
Вы сейчас серьезно, или издеваетесь?
9 окт 19, 15:13    [21990546]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Konst_One
Member

Откуда:
Сообщений: 11479
запросы разные и к разным источникам данных
select top (1) from mash where login = 'vasya'


select top (1) login = 'vasya' from [omega].[dbo].[MUSH]
9 окт 19, 15:14    [21990547]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Konst_One
Member

Откуда:
Сообщений: 11479
ТС, и вообще бред не пишете. изучите синтаксис хотя бы SELECT
9 окт 19, 15:15    [21990550]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
msLex
Member

Откуда:
Сообщений: 6674
Konst_One
запросы разные и к разным источникам данных
select top (1) from mash where login = 'vasya'



select top (1) login = 'vasya' from [omega].[dbo].[MUSH]
9 окт 19, 15:15    [21990552]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Hinamura
Member

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

О чем речь?

Заметил что выражения типа select(delete) from mush where login = 'vasya' не работают, но работают
select login='vasya' from [base].[dbo].[mush]
9 окт 19, 15:17    [21990555]     Ответить | Цитировать Сообщить модератору
 Re: Удаление 1го дубликата строки в таблице SQL  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1084
Konst_One
запросы разные и к разным источникам данных
select top (1) from mash where login = 'vasya'


select top (1) login = 'vasya' from [omega].[dbo].[MUSH]

Источники то пускай.
Первый запрос вообще не соответствует синтаксису, т.к. после "select (1) должны быть перечислены выбираемые поля, или стоять "*"
Ну и второй запрос не про выборку поля login из таблицы, он про то, что "верни мне значение 'vasya' и назови колонку login"
9 окт 19, 15:17    [21990556]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить