给定关系的SQL查询

时间:2013-07-31 06:37:06

标签: mysql sql sqlite

有3个表“用户”,“博客”和“图像” 一个用户可以拥有多个博客

单个博客可以有多个图片和签证诗 这是多个图像可以用于多个博客

我需要查询单个博客中的图片总数..

我还需要查询每个用户的总图像数量。

请引导查询以获取数据..

我创建的数据库是这样的:

创建表Author(Id int,Name nvarchar(max));

创建表格Image(Id int,ImagePath nvarchar(max));

创建表Blog(Id int,Name nvarchar(max),AuthorId int);

创建表BlogImages(Id int,BlogId int,ImageId int);

ALTER TABLE Blog ADD FOREIGN KEY(AuthorId)REFERENCES作者(Id)

ALTER TABLE BlogImages ADD FOREIGN KEY(BlogId)REFERENCES博客(Id)

ALTER TABLE BlogImages ADD FOREIGN KEY(ImageId)REFERENCES图片(Id)

在上面的关系中,我有一个表blogImages有blogId和ImageId,这意味着单个imageID可以有多个blogId,所以多个博客使用相同的图像

2 个答案:

答案 0 :(得分:0)

要获取每个用户的图片总数,请尝试按照查询

select U.userId,count(*) from
(
select U.userId,I.imageId from user U,blog B, images I
where B.userId==U.userId and B.blogId==I.blogId
)
group by U.userId

对于单个博客中的图像总数,请使用以下

select B.blogId,count(*) from
(
select B.blogId,I.imageId from blog B,images I
where B.blogId==I.blogId
)
group by B.blogId

答案 1 :(得分:0)

回复修改后的问题:

对于单个博客中的图片数量:

select COUNT(Image.Id)
from Image, BlogImages
where Image.Id = BlogImages.ImageId
and BlogImages.BlogId = @BlogId

其中@BlogId是您要为其计算图片的博客的ID。

用户数量:

select COUNT(Image.Id)
from Image, BlogImages, Blog
where Image.Id = BlogImages.ImageId
and BlogImages.BlogId = Blog.Id
and Blog.AuthorId = @AuthorId

其中@AuthorId是您要为其计算图像的用户的ID。

如果您不想两次计算相同的图片,则应在distinct关键字后添加select