【Transact-SQL】T-SQL中的Like

先进行一下简单的说明:

表tblb的address字段可能是包含了表tbla的address字段的内容,如果确实是包含了,那么返回tbla中的项目名称。


以前用游标来实现的功能,大概要写个几十行,现在用Like来实现,只要一句SQL就行了,感觉方便多了。

不过没有在大数据量的情况之下进行测试。


代码如下:

--先建立2个表格 create table tbla (ename varchar(50) ,address varchar(50)) create table tblb (address varchar(50))   insert into tbla values('金顺小区','金顺里x号') insert into tbla values('华小园','华小园xx号院') insert into tbla values('通天院项目','通天苑x号楼')   insert into tblb values('南开华小园xx号院') insert into tblb values('华山通天苑x号楼1111') insert into tblb values('东城区金顺里x号100') go  --drop table tbla --drop table tblb

--通过派生表来实现,派生表只能在本语句中使用 select *  from ( 	select case when b.address like '%'+a.address+'%'  					 then a.address 				else NULL  		   end as simple_address, 	        		   a.ename as building, 		   b.address as more_address 	from tbla a  	cross join tblb b ) derive  where simple_address is not null  /*  simple_address    building         more_address 金顺里x号           金顺小区          东城区金顺里x号100 华小园xx号院        华小园            南开华小园xx号院 通天苑x号楼         通天院项目        华山通天苑x号楼1111 */

在SQL Server 2005中可以通过通用表表达式CTE来实现,代码如下:

--通过CTE来实现,在批处理级别使用 with derive(building,simple_address,more_address) as (select a.ename as building,          case when b.address like '%'+a.address+'%'                    then a.address              else NULL          end as simple_address,                       b.address as more_address from tbla a  cross join tblb b )  select * from derive  where simple_address is not null

你可能感兴趣的:(JOIN,sql,server,table,null,insert)