我一点一点地学习高级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.
如果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