我在下面有两张表格
新闻(表名)
NewsId NewsDate
1 25-03-2014
2 29-03-2014
newsImageGal(表名)
newsSr newsId newsImages
1 1 images/i.jpg
2 1 images/j.jpg
3 1 images/k.jpg
4 2 images/l.jpg
5 2 images/m.jpg
6 2 images/n.jpg
我想要一个像
这样的结果 NewsId NewsDate newsId newsImages
1 25-03-2014 1 images/i.jpg
2 9-03-2014 2 images/l.jpg
我尝试过使用连接查询和逐个功能,但它显示了重复的多个记录如何解决此查询?
答案 0 :(得分:1)
您可以写为
;WITH CTE AS
( SELECT N.NewsId
,N.NewsDate
,NIG.newsImages
,ROW_NUMBER() OVER (PARTITION BY N.NewsId ORDER BY NIG.newsSr ASC)
AS rownum
FROM news N
JOIN newsImageGal NIG ON N.NewsId = NIG.newsId
)
SELECT NewsId,
NewsDate,
newsImages
FROM CTE
WHERE rownum = 1
答案 1 :(得分:0)
select distinct ng.newsId, ng.newsImages
from (
select MIN(newsSr),newsId,newsImages
from newsImageGal
group by newsId,newsImages) ng
join news ne
on ne.newsId=ng.newsId
答案 2 :(得分:0)
select n.NewsId,n.NewsDate,g.newsImages
from news n
join newsImageGal g on n.NewsId=g.newsSr
答案 3 :(得分:0)
试试这个。
SELECT a.NewsId,
a.NewsDate,
b.newsImages
FROM news a
JOIN (SELECT Row_number()OVER(partition BY newsid ORDER BY newssr) rn,
*
FROM newsImageGal) b
ON a.NewsId = b.newsId
WHERE rn = 1
这里的关键是找到每newsImageGal
个newsid
表中添加的第一张图片。
因此,请使用window function
按newsid
的顺序按newsSr
创建Row_number。
SELECT Row_number()OVER(partition BY newsid ORDER BY newssr) rn,
*
FROM newsImageGal
从上面的查询中,您可以看到rn=1
是添加到newsImageGal
的第一张图片,并将结果与news
表相关联,并使用rn=1
过滤结果
答案 4 :(得分:0)
SELECT n.NewsId,
n.NewsDate,
ng.newsId,
ng.newsimages
FROM news n,
(SELECT *,
Rank()OVER(PARTITION BY newsId ORDER BY newsSr DESC) AS rank
FROM newsImageGal) ng
WHERE n.NewsId = ng.newsId
AND rank = 1