日期:2014-05-18  浏览次数:20614 次

求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 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,')

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 '+@STR)
/*
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,9
7    社会适应能力    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 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,'理解孩子的