Удалить похожую запись в таблице с пользовательским условием - PullRequest
1 голос
/ 12 декабря 2010

У меня есть таблица на сервере sql, а в моей таблице есть поле типа name.Мне нужно удалить записи из моей таблицы с этим условием.Все символы аналогичны, за исключением последнего символа, и последний символ - «a» или «b»

Например, записи таблицы: name1a, name2a, name1b, ....удалить name1a и name1b

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Если вы спрашиваете, как удалить все строки, имеющие дубликаты в таблице (совпадающие со всеми, кроме последнего символа), а не как использовать подстановочный знак, вот как:

declare @names table (keycol int, namecol varchar(10))

insert into @names (keycol, namecol) values (1, 'name1a')
insert into @names (keycol, namecol) values (2, 'name1b')
insert into @names (keycol, namecol) values (3, 'name2a')
insert into @names (keycol, namecol) values (4, 'name2b')
insert into @names (keycol, namecol) values (5, 'name3a')
insert into @names (keycol, namecol) values (6, 'name4b')

;with dupenames as
(
    select LEFT(namecol,LEN(namecol)-1) as NameMinusOne
    from @names
    group by LEFT(namecol,LEN(namecol)-1)
    having count(*) > 1
)
delete from @names
from @names n
inner join dupenames dn on dn.NameMinusOne = LEFT(n.namecol,LEN(n.namecol)-1)

ВЫВОД:

keycol      namecol
----------- ----------
5           name3a
6           name4b
0 голосов
/ 12 декабря 2010

Я думаю, что вы спрашиваете о том, как использовать подстановочные знаки для идентификации (и удаления) определенных строк?

На сервере sql подстановочный знак с одним символом равен '_', поэтому, если вы хотите удалить строки, начинающиеся с 'name1' и имеющие суффикс из одного символа, этот тип будет работать:

declare @names table (keycol int, namecol varchar(10))

insert into @names (keycol, namecol) values (1, 'name1a')
insert into @names (keycol, namecol) values (2, 'name1b')
insert into @names (keycol, namecol) values (3, 'name2a')
insert into @names (keycol, namecol) values (4, 'name2b')
insert into @names (keycol, namecol) values (5, 'name3a')
insert into @names (keycol, namecol) values (6, 'name3b')

delete from @names where namecol like 'name1_'

Если после части 'name1' будет больше символов, вы бы использовали:

delete from @names where namecol like 'name1%'
...