Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 给定关系的SQL查询_Mysql_Sql_Sqlite - Fatal编程技术网

Mysql 给定关系的SQL查询

Mysql 给定关系的SQL查询,mysql,sql,sqlite,Mysql,Sql,Sqlite,有3个表“用户”、“博客”和“图像” 一个用户可以有多个博客 一个博客可以有多个图片和文字 也就是说,多个图像可以用于多个博客 我需要一个单一的博客中的图像总数查询 我还需要查询每个用户的图像总数 请使用查询向导获取数据 我创建的数据库如下所示: 创建表作者(Id int,Name nvarchar(max)) 创建表映像(Id int,ImagePath nvarchar(max)) 创建表Blog(Id int,Name nvarchar(max),authord int) 创建表BlogI

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

一个博客可以有多个图片和文字 也就是说,多个图像可以用于多个博客

我需要一个单一的博客中的图像总数查询

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

请使用查询向导获取数据

我创建的数据库如下所示:

创建表作者(Id int,Name nvarchar(max))

创建表映像(Id int,ImagePath nvarchar(max))

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

创建表BlogImages(Id int、BlogId int、ImageId int)

ALTER TABLE Blog添加外键(AuthorId)引用作者(Id)

ALTER TABLE BlogImages添加外键(BlogId)引用Blog(Id)

ALTER TABLE BlogImages添加外键(ImageId)引用图像(Id)


在上面的关系中,我有一个包含blogId和ImageId的BlogImages表,这意味着单个ImageId可以有多个blogId,因此多个blog使用相同的图像来获取每个用户的图像总数,请尝试以下查询

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
对修改后的问题的答复:

对于单个博客中的图像数:

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

你能在www.sqlfiddle.com上提供一个关于你的表格的例子吗?请提供一些示例数据。我已经提供了我的表格。这样,你就可以正确地指导我了。这样,现在你就可以指导我了很好,我已经提供了我的桌子,这样你现在就可以指导我了properly@user2631770我更新了我的答案以适应你修改后的问题。为什么不使用正确的连接?@Sam在幕后使用
,其中
语法是一个内部连接,在我看来,它对人类来说更容易阅读。只要我只需要内部连接而不需要其他任何东西,我总是使用
where
。我知道这在幕后并不重要(对好的编译器来说很好)。但我个人觉得,如果它说
在Y.ID=X.ID上加入X
,就更容易理解了。特别是在较大的查询中,它可以立即清楚地表明您正在进行内部联接。我想:)