繁体   English   中英

如何编写此IN查询

[英]How Do I Write This IN Query

我有这张桌子:

video_id  tag_id
10        7
6         7
10        5
6         5
9         5
9         4
10        4

我想写一个查询,它会给我video_id ,它同时tag_id 7和5.所以应该选择video_id 10和6,而不是9。

我试过where tag_id IN (7, 5)条件,但显然包括9。

它会对你有用吗?

SELECT video_id
FROM table1
WHERE tag_id iN (7,5)
GROUP BY video_id
HAVING COUNT(DISTINCT tag_id) =2;

更新 如果您对(video_id,tag_id)有唯一约束,则不需要COUNT(DISTINCT) ; COUNT(*)也可以

任意解决方案 -

下面是sql server的答案,使用mysql,你需要在video_id上使用count(),然后查找具有所需值的行。

我没有测试mysql但可以随意添加正确的mysql解决方案的编辑。


使用一个名为neededtag的表,其中包含一列(标签),其中包含您想要的列表

SELECT video_id
FROM
(
  SELECT video_id, 
         row_number() OVER (PARTITION BY vidio_id ORDER BY video_ID) as RN
  FROM table
  JOIN neededtag ON tag_id = tag
) sub
WHERE RN = (SELECT COUNT(*) FROM neededtag)

或者你所需的标签有一个criteraname列......那么它看起来像这样:

SELECT video_id
FROM
(
  SELECT video_id, 
         row_number() OVER (PARTITION BY vidio_id ORDER BY video_ID) as RN
  FROM table
  JOIN neededtag ON tag_id = tag and criteraname = "friday tag list"
) sub
WHERE RN = (SELECT COUNT(*) FROM neededtag WHERE criteraname = "friday tag list")

事先答复

SELECT video_id
FROM table
WHERE tag_id = 5
INTERSECT
SELECT video_id
FROM table
WHERE tag_id = 7

要么

SELECT video_id
FROM table
WHERE tag_id = 5
AND video_id IN 
(
  SELECT video_id
  FROM table
  WHERE tag_id = 7
)

要么

SELECT v1.video_id
FROM table v1
JOIN table v2 WHERE v1.video_id = v2.video_id AND v2.tag_id = 7
WHERE tag_id = 5

可能有更快的方法,但这很简单。 我假设有一个带有主键video_id的视频表,所以我没有SELECT DISTINCT。

SELECT v.video_id FROM videos as v WHERE
    EXISTS (SELECT * FROM tagtable as t WHERE t.video_id = v.video_id and tag_id = 7)
    AND EXISTS (SELECT * FROM tagtable as t WHERE t.video_id = v.video_id and tag_id = 5)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM