如何从sql中的两个表中获取不同的记录?

时间:2015-01-01 10:15:49

标签: sql sql-server

我在下面有两张表格

新闻(表名)

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

我尝试过使用连接查询和逐个功能,但它显示了重复的多个记录如何解决此查询?

5 个答案:

答案 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 

这里的关键是找到每newsImageGalnewsid表中添加的第一张图片。 因此,请使用window functionnewsid的顺序按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