SQL 两表联系关系,关联时取一字段的一部分做链接,求方法
SQL 两表关联,关联时取一字段的一部分做链接,求方法
如下面:
需要找出,#c中以#b表中domain为结尾的记录,数据量大希望有比较好的代码:
即找出:
1@abc.com
12@a.com
3@@b.com
------最佳解决方案--------------------
经过两位大神的引导,出来了一版。用join链接表,提高效能。
------其他解决方案--------------------
------其他解决方案--------------------
对字符串做这样的操作,其实无可避免性能底下。
如下面:
需要找出,#c中以#b表中domain为结尾的记录,数据量大希望有比较好的代码:
即找出:
1@abc.com
12@a.com
3@@b.com
create table #c(email varchar(10))
insert into #c values ('1@abc.com')
insert into #c values ('12@a.com')
insert into #c values ('3@@b.com')
insert into #c values ('123@d.com')
insert into #c values ('1@sina.com')
create table #b(domain varchar(10))
insert into #b values('abc.com')
insert into #b values('a.com')
insert into #b values('b.com')
select *
from #c
where RIGHT(email,len(email)-CHARINDEX('@',email,1)) in (select domain from #b)
------最佳解决方案--------------------
经过两位大神的引导,出来了一版。用join链接表,提高效能。
create table #c(email varchar(10))
insert into #c values ('1@abc.com')
insert into #c values ('12@a.com')
insert into #c values ('3@@b.com')
insert into #c values ('123@d.com')
insert into #c values ('4@b.com')
insert into #c values ('123@@A.com')
insert into #c values ('1@sina.com')
create table #b(domain varchar(10))
insert into #b values('abc.com')
insert into #b values('a.com')
insert into #b values('b.com')
select c.email
from #c c left join #b b on c.email like '%@'+b.domain
where b.domain is not null
------其他解决方案--------------------
create table #c(email varchar(10))
insert into #c values ('1@abc.com')
insert into #c values ('12@a.com')
insert into #c values ('3@@b.com')
insert into #c values ('123@d.com')
insert into #c values ('1@sina.com')
create table #b(domain varchar(10))
insert into #b values('abc.com')
insert into #b values('a.com')
insert into #b values('b.com')
select *
from #c
where exists(select 1 from #b where #c.email like '%@'+domain)
/*
1@abc.com
12@a.com
3@@b.com
*/
------其他解决方案--------------------
对字符串做这样的操作,其实无可避免性能底下。
--create table #c(email varchar(10))
--insert into #c values ('1@abc.com')
--insert into #c values ('12@a.com')
--insert into #c values ('3@@b.com')
--insert into #c values ('123@d.com')
--insert into #c values ('1@sina.com')
--create table #b(domain varchar(10))
--insert into #b values('abc.com')
--insert into #b values('a.com')
--insert into #b values('b.com')
SELECT *
FROM #c
WHERE EXISTS ( SELECT 1
FROM #b