SQL比较同一个表中的值

时间:2017-08-22 11:22:23

标签: sql sql-server

我有一个数据库,我需要搜索双重登录。

类型:字符

示例:

Display: block;

我需要找到像15/17-Abc这样的用户,双重登录,但不同的第一个数字 我如何搜索登录? (我有成千上万的人)

2 个答案:

答案 0 :(得分:0)

嗯。嗯。 。 。您可以使用exists查找第二部分的匹配项。一种方法是拆分字符串。另一个是使用字符串操作函数:

select t.*
from t
where login like '%-%' and
      exists (select 1
              from t t2
              where t2.login <> t.login and
                    t2.login like '%-%' and
                    substring(t2.login, charindex('-', t2.login), len(t2.login)) = substring(t.login, charindex('-', t.login), len(t.login))
             );

答案 1 :(得分:0)

通过这种方式,您可以找到所有重复的部分:

declare @t table (col varchar(100));
insert into @t values
('15-Abc'),
('15-Deg'),
('17-Abc');

select substring(col, 3, len(col))
from @t
group by substring(col, 3, len(col))
having count(*) > 1;

如果您希望原始表的行使用此代码:

declare @t table (col varchar(100));
insert into @t values
('15-Abc'),
('15-Deg'),
('17-Abc');

with cte as
(
select substring(col, 3, len(col)) as same_part
from @t
group by substring(col, 3, len(col))
having count(*) > 1
)

select *
from @t t
where  exists(select * from cte c where substring(t.col, 3, len(col)) = c.same_part);