Mysql 具有2个内部联接的SQL计数
视频表存储id和视频数据 标记表存储id和标记名称 video_tag table连接video_ID和tag_ID以表示哪个视频属于哪个标记 例如,在下面的查询中,我可以得到属于ID为3和4的标签的视频 还有,我想知道有多少行。我应该如何修改查询Mysql 具有2个内部联接的SQL计数,mysql,sql,Mysql,Sql,视频表存储id和视频数据 标记表存储id和标记名称 video_tag table连接video_ID和tag_ID以表示哪个视频属于哪个标记 例如,在下面的查询中,我可以得到属于ID为3和4的标签的视频 还有,我想知道有多少行。我应该如何修改查询 SELECT * FROM video INNER JOIN video_tag ON video.id = video_tag.video_id INNER JOIN tag
SELECT *
FROM video
INNER JOIN video_tag ON video.id = video_tag.video_id
INNER JOIN tag ON tag.id = video_tag.tag_id
WHERE video_tag.tag_id IN (3,4)
GROUP BY video.id
HAVING COUNT(video.id)=2
ORDER BY video.id DESC
*
表结构:
这是完整的查询。它将向您显示每一个视频,以及它的总数。希望能有帮助
SELECT v.id, COUNT(v.id) as [Number]
FROM video AS v -- using alias
INNER JOIN video_tag vt ON v.id = vt.video_id
INNER JOIN tag t ON t.id = vt.tag_id
WHERE vt.tag_id IN (3,4) -- this is optional; you can remove it
GROUP BY v.id
欢迎进一步询问。视频表中的视频总数-
SELECT count(*) FROM video;
其他关系表中也存在的行的总数-
SELECT COUNT(*)
FROM video
INNER JOIN video_tag ON video.id = video_tag.video_id
INNER JOIN tag ON tag.id = video_tag.tag_id
仅标记_id 3和4的总行数
SELECT COUNT(*)
FROM video
INNER JOIN video_tag ON video.id = video_tag.video_id
INNER JOIN tag ON tag.id = video_tag.tag_id
WHERE video_tag.tag_id IN (3,4)
SELECT COUNT(distinct video.id)
FROM video
INNER JOIN video_tag ON video.id = video_tag.video_id
INNER JOIN tag ON tag.id = video_tag.tag_id
WHERE video_tag.tag_id IN (3,4)
标签标识3和4的总唯一视频标识
SELECT COUNT(*)
FROM video
INNER JOIN video_tag ON video.id = video_tag.video_id
INNER JOIN tag ON tag.id = video_tag.tag_id
WHERE video_tag.tag_id IN (3,4)
SELECT COUNT(distinct video.id)
FROM video
INNER JOIN video_tag ON video.id = video_tag.video_id
INNER JOIN tag ON tag.id = video_tag.tag_id
WHERE video_tag.tag_id IN (3,4)
您的查询应该是您想要的。但是,您可以简化它:
SELECT v.*
FROM video v INNER JOIN
video_tag vt
ON v.id = vt.video_id
WHERE vt.tag_id IN (3, 4)
GROUP BY v.id
HAVING COUNT(v.id) = 2
ORDER BY v.id DESC ;
唯一不起作用的时候是视频可能有相同类型的重复标签。在这种情况下,您可以改为使用COUNTDISTINCT
如果要返回包含分页的行数的查询,请使用SQL_CALC_FOUND_rows:
然后使用找到的行
如果只需要行数,可以使用子查询,并进一步简化:
SELECT COUNT(*)
FROM (SELECT v.*
FROM video_tag vt
WHERE vt.tag_id IN (3, 4)
GROUP BY vt.id
HAVING COUNT(*) = 2
) t
你想知道视频总数吗?我想你的查询已经提供了总行数和详细信息…如果你只想计数,那么你可以使用select count*from并从查询中删除order by子句…如果你想要一些特殊的东西,那么解释一下…@ZafarMalik我想知道有多少行。如果a just put select count*它只给我2个,其中包含count video.id=3@aadi对我只想要视频的总数。可以给我一个工作查询吗?因为很明显,必须有一个计数,但在哪里呢?我已尝试过,但出现了一个简单的列名“id”错误。选择COUNT*FROM SELECT*FROM video internal JOIN video_tag ON video.id=video_tag.video_id internal JOIN tag ON tag.id=video_tag.tag_id其中video_tag.tag_id IN 3,4,5 GROUP BY video.id具有COUNTvideo.id=3作为TDo注意“alias”的使用,因为它提供了很多方便您不必编写完整的表名。