查询问题,有点难

xujianfu 2006-07-06 01:57:59
有表news(新闻)
id l_TypeID s_Reside
1 1 1,2,3,4
2 2 2,3
3 1 3,4
4 3 1,3,4
.....
和表CityInfo(站点)
id name
1 aaa
2 bbb
3 ccc
4 ddd
....
news和CityInfo 的关系是CityInfo表的id是news表s_Reside逗号隔开的数据
要把每个站点的每条新闻的前3条查出来怎么查?
...全文
160 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel8601 2006-07-06
  • 打赏
  • 举报
回复
呵呵,表达怎么就那么郁闷呢,我都看的头晕了
fcuandy 2006-07-06
  • 打赏
  • 举报
回复
SELECT n.id,n.l_typeID,c.Name
FROM @news n
INNER JOIN @city c
ON CHARINDEX(','+RTRIM(c.id)+',',','+n.s_Reside+',')>0 ORDER BY n.id

你看看结果是什么。
这是拆出来的所有记录。
按 name取前两条,这个要求逻辑是清楚的。
因为 s_reside中存的city的id 不重复, 也就是说,只要这条记录的s_reside里有某条city的id那么这条s_reside就属于这个city. 所以按city的name取两条逻辑很清楚。

而按type取两条.
看看这些数据
newsid typeid cityname
1 1 aaa
1 1 bbb
1 1 ccc
1 1 ddd
虽是四行,却明显指的一条news, 不明白你typeid=1的news如果取newsid=1的记录,你要取哪两条?

语句没什么难的,你逻辑有问题,或者你心里想的很明确,却表达不出来,这样语句当然也没法给你写。
xujianfu 2006-07-06
  • 打赏
  • 举报
回复
说白了点就是 假如有以下
id l_TypeID s_Reside updatetime id name
1 1 1,2,3,4 2006-07-07 1 aaa
1 1 1,2,3,4 2006-07-06 1 aaa
1 1 1,2,3,4 2006-07-05 1 aaa
4 3 1,3,4 2006-07-07 1 aaa
4 3 1,3,4 2006-07-06 1 aaa
4 3 1,3,4 2006-07-05 1 aaa
4 3 1,3,4 2006-07-04 1 aaa

1 1 1,2,3,4 2006-07-07 2 bbb
1 1 1,2,3,4 2006-07-06 2 bbb
1 1 1,2,3,4 2006-07-05 2 bbb
2 2 2,3 2006-07-07 2 bbb
2 2 2,3 2006-07-06 2 bbb
2 2 2,3 2006-07-05 2 bbb
......
将变成
id l_TypeID s_Reside updatetime id name
1 1 1,2,3,4 2006-07-07 1 aaa
1 1 1,2,3,4 2006-07-06 1 aaa

4 3 1,3,4 2006-07-07 1 aaa
4 3 1,3,4 2006-07-06 1 aaa

1 1 1,2,3,4 2006-07-07 2 bbb
1 1 1,2,3,4 2006-07-06 2 bbb

2 2 2,3 2006-07-07 2 bbb
2 2 2,3 2006-07-06 2 bbb

......

xujianfu 2006-07-06
  • 打赏
  • 举报
回复
我知道,呵呵
我是说我还有一个约束条件,[每个]站点的[每条]新闻的前n条
查出来的结果不是上面这样的,是
id l_TypeID s_Reside updatetime id name
1 1 1,2,3,4 2006-07-06 1 aaa
4 3 1,3,4 2006-07-05 1 aaa
1 1 1,2,3,4 2006-07-06 2 bbb
2 2 2,3 2006-07-06 2 bbb
1 1 1,2,3,4 2006-07-06 3 ccc
3 1 3,4 2006-07-05 3 ccc
2 2 2,3 2006-07-06 3 ccc
4 3 1,3,4 2006-07-05 3 ccc
1 1 1,2,3,4 2006-07-06 4 ddd
3 1 3,4 2006-07-05 4 ddd
4 3 1,3,4 2006-07-05 4 ddd
......
按照name分开后然后按照l_TypeID找到前2条
fcuandy 2006-07-06
  • 打赏
  • 举报
回复
按updatetime?

SELECT * FROM
(SELECT n.id,n.l_typeID,c.Name,n.UpdateTime
FROM @news n
INNER JOIN @city c
ON CHARINDEX(','+RTRIM(c.id)+',',','+n.s_Reside+',')>0
) x
WHERE 3>(SELECT COUNT(1) FROM
(SELECT n.id,n.l_typeID,c.Name,n.UpdateTime
FROM @news n
INNER JOIN @city c
ON CHARINDEX(','+RTRIM(c.id)+',',','+n.s_Reside+',')>0
) y
WHERE y.Name=x.Name AND y.UpdateTime>x.UpdateTime)

注:我的表变量里没定义UpdateTime这字段,你可以自己加上。
xujianfu 2006-07-06
  • 打赏
  • 举报
回复
郁闷 还少了个约束条件,好象也不怎么容易表达清楚,唉..
fcuandy 2006-07-06
  • 打赏
  • 举报
回复
DECLARE @news TABLE(id INT IDENTITY(1,1),l_TypeID INT,s_Reside VARCHAR(20))
INSERT @news
SELECT 1,'1,2,3,4'
UNION ALL SELECT 2,'2,3'
UNION ALL SELECT 1,'3,4'
UNION ALL SELECT 3,'1,2,4'
UNION ALL SELECT 5,'2,3,4,1'

DECLARE @city TABLE(id INT IDENTITY(1,1),Name VARCHAR(10))
INSERT @city SELECT 'aaa'
UNION ALL SELECT 'bbb'
UNION ALL SELECT 'ccc'
UNION ALL SELECT 'ddd'


SELECT * FROM
(SELECT n.id,n.l_typeID,c.Name
FROM @news n
INNER JOIN @city c
ON CHARINDEX(','+RTRIM(c.id)+',',','+n.s_Reside+',')>0
) x
WHERE 3>(SELECT COUNT(1) FROM
(SELECT n.id,n.l_typeID,c.Name
FROM @news n
INNER JOIN @city c
ON CHARINDEX(','+RTRIM(c.id)+',',','+n.s_Reside+',')>0
) y
WHERE y.Name=x.Name AND y.id>x.id)
fcuandy 2006-07-06
  • 打赏
  • 举报
回复
news表里的id是标识列吗?是自动编号的列吗?
xujianfu 2006-07-06
  • 打赏
  • 举报
回复
漏了一点news表中还有一个字段 updatetime
有表news(新闻)
id l_TypeID s_Reside updatetime
1 1 1,2,3,4 2006-07-06
2 2 2,3 2006-07-06
3 1 3,4 2006-07-05
4 3 1,3,4 2006-07-05
.....
和表CityInfo(站点)
id name
1 aaa
2 bbb
3 ccc
4 ddd
....
news和CityInfo 的关系是CityInfo表的id是news表s_Reside逗号隔开的数据
要把每个站点的每条新闻的前2条查出来怎么查(按照updatetime的顺序)?


id l_TypeID s_Reside updatetime id name
1 1 1,2,3,4 2006-07-06 1 aaa
4 3 1,3,4 2006-07-05 1 aaa

1 1 1,2,3,4 2006-07-06 2 bbb
2 2 2,3 2006-07-06 2 bbb

1 1 1,2,3,4 2006-07-06 3 ccc
2 2 2,3 2006-07-06 3 ccc
3 1 3,4 2006-07-05 3 ccc
4 3 1,3,4 2006-07-05 3 ccc

1 1 1,2,3,4 2006-07-06 4 ddd
3 1 3,4 2006-07-05 4 ddd
4 3 1,3,4 2006-07-05 4 ddd
......
最后查出来的是
id l_TypeID s_Reside updatetime id name
1 1 1,2,3,4 2006-07-06 1 aaa
4 3 1,3,4 2006-07-05 1 aaa

1 1 1,2,3,4 2006-07-06 2 bbb
2 2 2,3 2006-07-06 2 bbb

1 1 1,2,3,4 2006-07-06 3 ccc
2 2 2,3 2006-07-06 3 ccc

1 1 1,2,3,4 2006-07-06 4 ddd
3 1 3,4 2006-07-05 4 ddd
......
zheng_hz 2006-07-06
  • 打赏
  • 举报
回复
“每个站点的每条新闻的前3条 ”

有严重语病阿
xujianfu 2006-07-06
  • 打赏
  • 举报
回复
请各位大哥帮帮忙,我搞了好久了,没搞出来.
xujianfu 2006-07-06
  • 打赏
  • 举报
回复
请各位大哥帮帮忙.

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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