SQL查询问题~~~在线等。。。

dayohuang 2010-05-26 10:08:45
类别表 class

id class


1 娱乐新闻

2 行业新闻

3 政治新闻

4 八卦新闻

新闻表 news

id newsname newsclass


1 新闻标题 1,3,4

2 新闻标题 1,2,4



查询新闻表,并新闻类别字段的ID变成 行业新闻,政治新闻,八卦新闻 即类别标题,而不是类别ID 请教大侠们如何做
...全文
77 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csmark 2010-05-26
  • 打赏
  • 举报
回复
膜拜..
htl258_Tony 2010-05-26
  • 打赏
  • 举报
回复
--> 生成测试数据表: [class]
IF OBJECT_ID('[class]') IS NOT NULL
DROP TABLE [class]
GO
CREATE TABLE [class] ([id] [int],[class] [nvarchar](10))
INSERT INTO [class]
SELECT '1','娱乐新闻' UNION ALL
SELECT '2','行业新闻' UNION ALL
SELECT '3','政治新闻' UNION ALL
SELECT '4','八卦新闻'

--> 生成测试数据表: [news]
IF OBJECT_ID('[news]') IS NOT NULL
DROP TABLE [news]
GO
CREATE TABLE [news] ([id] [int],[newsname] [nvarchar](10),[newsclass] [nvarchar](10))
INSERT INTO [news]
SELECT '1','新闻标题','1,3,4' UNION ALL
SELECT '2','新闻标题','1,2,4'

--SELECT * FROM [class]
--SELECT * FROM [news]

-->SQL查询如下:
IF OBJECT_ID('[fn_test]') IS NOT NULL
DROP FUNCTION [fn_test]
GO
CREATE FUNCTION [fn_test](
@s varchar(1000)
)RETURNS varchar(1000)
AS
BEGIN
SELECT @S=REPLACE(','+@S+',',','+LTRIM([id])+',',','+[class]+','),
@S=REPLACE(@S,',,',',')
FROM [class]
RETURN LEFT(STUFF(@S,1,1,''),LEN(@S)-2)
END
GO

SELECT [id],[newsname],[newsclass]=dbo.[fn_test]([newsclass]) FROM [news]
/*
id newsname newsclass
----------- ---------- ----------------------------------------------------
1 新闻标题 娱乐新闻,政治新闻,八卦新闻
2 新闻标题 娱乐新闻,行业新闻,八卦新闻

(2 行受影响)
*/
黄_瓜 2010-05-26
  • 打赏
  • 举报
回复
--> 测试数据:[class]
if object_id('[class]') is not null drop table [class]
go
create table [class]([id] int,[class] varchar(8))
insert [class]
select 1,'娱乐新闻' union all
select 2,'行业新闻' union all
select 3,'政治新闻' union all
select 4,'八卦新闻'

--> 测试数据:[news]
if object_id('[news]') is not null drop table [news]
go
create table [news]([id] int,[newsname] varchar(8),[newsclass] varchar(5))
insert [news]
select 1,'新闻标题','1,3,4' union all
select 2,'新闻标题','1,2,4'

--------------------------------查询开始------------------------------


if object_id('f_str') is not null drop function f_str
go
create function f_str (@newsclass varchar(200))
returns varchar(200)
as
begin
declare @s varchar(200)
select @s=isnull(@s+',','')+[class] from [class] where charindex(','+cast(id as varchar)+',',','+@newsclass+',')>0
return @s
end
go

select [id],[newsname],[newsclass]= dbo.f_str([newsclass]) from [news]
/*
id newsname newsclass
----------- -------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 新闻标题 娱乐新闻,政治新闻,八卦新闻
2 新闻标题 娱乐新闻,行业新闻,八卦新闻

(2 行受影响)


*/
dayohuang 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 acupofnescafe 的回复:]
楼主要的结果是啥样的呀?
[/Quote]
1 新闻标题 行业新闻,政治新闻,八卦新闻
幸运的意外 2010-05-26
  • 打赏
  • 举报
回复
楼主要的结果是啥样的呀?
dayohuang 2010-05-26
  • 打赏
  • 举报
回复
顶一个啊。怎么没人?
黄_瓜 2010-05-26
  • 打赏
  • 举报
回复
占位先

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧