当前位置: 代码迷 >> Sql Server >> 求SQL语句,给100分解决办法
  详细解决方案

求SQL语句,给100分解决办法

热度:73   发布时间:2016-04-27 19:11:24.0
求SQL语句,给100分
--请大家帮忙,给100分。

--建表SQL语句
if OBJECT_ID('TBC_EventInfo','U') is not null
drop table TBC_EventInfo
go
create table TBC_EventInfo
(
eventID int primary key,
eventName varchar(200),
VideoUrl varchar(256),
KeywordSet varchar(100)
)

--数据
insert into TBC_EventInfo values(1,'早期教育','www.csdn.net/a.wma',',1,2,3,4,')
insert into TBC_EventInfo values(2,'营养性疾病','www.csdn.net/a.wma',',1,3,5,')
insert into TBC_EventInfo values(3,'西欧早期教育','www.csdn.net/a.wma',',1,7,8,9,')
insert into TBC_EventInfo values(4,'婴幼儿生理特点','www.csdn.net/a.wma',',4,6,')
insert into TBC_EventInfo values(5,'理解孩子的成长','www.csdn.net/a.wma',',5,7,')
insert into TBC_EventInfo values(6,'让我们共同分享','www.csdn.net/a.wma',',6,9')
insert into TBC_EventInfo values(7,'社会适应能力','www.csdn.net/a.wma',',10,7,')
insert into TBC_EventInfo values(8,'学前脑开发','www.csdn.net/a.wma',',5,9,')
insert into TBC_EventInfo values(9,'教养方式','www.csdn.net/a.wma',',2,4,')
insert into TBC_EventInfo values(10,'行为课程的开发','www.csdn.net/a.wma',',6,12,')

--问题
--其中KeywordSet列存储了以,分隔的另一个表的id;
--要求根据传入的 一个以,分隔的id的字符串 IDs 
--查找TBC_EventInfo.KeywordSet列中包含IDs中一个或多个id的行。
--例如:
--1、传入参数 "1,2," 要求查询结果中包括所有KeywordSet列包含 ",1," 或 ",2,"的
--返回结果应包含 eventID 为1、2、3、9的数据行
--2、传入参数 "5,7,9" 要求查找结果中包信所有KeywordSet列包含 ",5," 、 ",7,"、",9,"的
--返回结果应包含eventID 为2、3、5、6、7、8的数据行


------解决方案--------------------
这么设计太“高明”了,查询也就需要高明的方法

按我不高明的想法,拆出一个关系表不是写法就简单了吗
------解决方案--------------------
SQL code
if OBJECT_ID('TBC_EventInfo','U') is not nulldrop table TBC_EventInfogocreate table TBC_EventInfo(eventID int primary key,eventName varchar(200),VideoUrl varchar(256),KeywordSet varchar(100))--数据insert into TBC_EventInfo values(1,'早期教育','www.csdn.net/a.wma',',1,2,3,4,')insert into TBC_EventInfo values(2,'营养性疾病','www.csdn.net/a.wma',',1,3,5,')insert into TBC_EventInfo values(3,'西欧早期教育','www.csdn.net/a.wma',',1,7,8,9,')insert into TBC_EventInfo values(4,'婴幼儿生理特点','www.csdn.net/a.wma',',4,6,')insert into TBC_EventInfo values(5,'理解孩子的成长','www.csdn.net/a.wma',',5,7,')insert into TBC_EventInfo values(6,'让我们共同分享','www.csdn.net/a.wma',',6,9')insert into TBC_EventInfo values(7,'社会适应能力','www.csdn.net/a.wma',',10,7,')insert into TBC_EventInfo values(8,'学前脑开发','www.csdn.net/a.wma',',5,9,')insert into TBC_EventInfo values(9,'教养方式','www.csdn.net/a.wma',',2,4,')insert into TBC_EventInfo values(10,'行为课程的开发','www.csdn.net/a.wma',',6,12,')DECLARE @STR VARCHAR(8000)SELECT @STR='5,7,9'IF @STR LIKE ',%' SET @STR=STUFF(@STR,1,1,'')IF @STR LIKE '%,' SET @STR=LEFT(@STR,LEN(@STR)-1)SET @STR='('',''+KeywordSet+'','' LIKE ''%,'+REPLACE(@STR,',',',%'' OR '',''+KeywordSet+'','' LIKE ''%,')+',%'')'EXEC ('SELECT * FROM TBC_EventInfo WHERE [email protected])/*2    营养性疾病    www.csdn.net/a.wma    ,1,3,5,3    西欧早期教育    www.csdn.net/a.wma    ,1,7,8,9,5    理解孩子的成长    www.csdn.net/a.wma    ,5,7,6    让我们共同分享    www.csdn.net/a.wma    ,6,97    社会适应能力    www.csdn.net/a.wma    ,10,7,8    学前脑开发    www.csdn.net/a.wma    ,5,9,*/
------解决方案--------------------
SQL code
--建表SQL语句if OBJECT_ID('TBC_EventInfo','U') is not nulldrop table TBC_EventInfogocreate table TBC_EventInfo(eventID int primary key,eventName varchar(200),VideoUrl varchar(256),KeywordSet varchar(100))--数据insert into TBC_EventInfo values(1,'早期教育','www.csdn.net/a.wma',',1,2,3,4,')insert into TBC_EventInfo values(2,'营养性疾病','www.csdn.net/a.wma',',1,3,5,')insert into TBC_EventInfo values(3,'西欧早期教育','www.csdn.net/a.wma',',1,7,8,9,')insert into TBC_EventInfo values(4,'婴幼儿生理特点','www.csdn.net/a.wma',',4,6,')insert into TBC_EventInfo values(5,'理解孩子的成长','www.csdn.net/a.wma',',5,7,')insert into TBC_EventInfo values(6,'让我们共同分享','www.csdn.net/a.wma',',6,9')insert into TBC_EventInfo values(7,'社会适应能力','www.csdn.net/a.wma',',10,7,')insert into TBC_EventInfo values(8,'学前脑开发','www.csdn.net/a.wma',',5,9,')insert into TBC_EventInfo values(9,'教养方式','www.csdn.net/a.wma',',2,4,')insert into TBC_EventInfo values(10,'行为课程的开发','www.csdn.net/a.wma',',6,12,')declare @a varchar(100)select @a='1,2'select distinct t1.eventID from TBC_EventInfo t1 inner join(select substring(@a, number, charindex(',', @a + ',', number) - number) a  FROM master..spt_values  WHERE type='p' and substring(',' + @a,number, 1) = ',' )t2on CHARINDEX(','+t2.a+',',t1.KeywordSet)>0/*eventID1239*/select @a='5,7,9'select distinct t1.eventID from TBC_EventInfo t1 inner join(select substring(@a, number, charindex(',', @a + ',', number) - number) a  FROM master..spt_values  WHERE type='p' and substring(',' + @a,number, 1) = ',' )t2on CHARINDEX(','+t2.a+',',','+t1.KeywordSet+',')>0/*eventID235678*/
  相关解决方案