SQL加入三个表

前端之家收集整理的这篇文章主要介绍了SQL加入三个表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我一点一点地学习高级SQL查询,并且我遇到了一个问题:

我有三张表:新闻,作者和图片.新闻表(newsID)中的每个字段是一个新闻故事,然后在作者表(authorID)中具有相关联的作者,并且可以在图像表中具有任意数量的图像.每个图像都有和关联(newsID).所以每个故事都有一个作者,但可以有几个图像.

我想列出所有的新闻故事,并只使用其中一个图像作为缩略图.问题是,任何SQL查询我尝试列出新闻项目,给我的结果等于图像表中的图像数量,而不是新闻项目的数量.

我不知道从哪里走.任何帮助将不胜感激.

解决方法

如果有3张表是[新闻],[作者]和[图像]与适当的列,那么

派生表法

您可以有一个派生的图像表,以便每个消息获取一个图像,然后将其与新闻和作者表一起显示,如图所示.
这已经在sql Server中编写和测试.

SELECT  
      N.[newsStoryTitle],A.authorName,I.imageData1
  FROM [news] N
  LEFT OUTER JOIN author A ON A.newsID = N.newsID
  LEFT OUTER JOIN 
    (
    SELECT newsID,MAX(imageData) AS imageData1 FROM [image] 
    GROUP BY newsID
    )  AS I ON I.newsID = N.newsID
ORDER BY N.newsID

如果不需要任何图像的消息,您可以用INNER JOIN替换LEFT OUTER JOIN.

相关子查询方法(由Marcelo Cantos建议)

如果imageData存储为文本或图像,则派生表中的MAX将无法正常工作.在这种情况下,您可以使用如下相关的子查询

SELECT  N.newsStoryTitle,I.imageData
FROM    dbo.news N
        INNER JOIN dbo.author A ON N.newsID = A.newsID
        INNER JOIN dbo.image I ON N.newsID = I.newsID
WHERE   imageID = ( SELECT  MAX(imageID)
                    FROM    dbo.image
                    WHERE   newsID = N.newsID
                  )
ORDER BY n.newsID

猜你在找的MsSQL相关文章