Tags SQL查询:如果行在相关表中具有所有相关选项,则选择该行
给定一个表定义:Tags SQL查询:如果行在相关表中具有所有相关选项,则选择该行,tags,relation,sql,Tags,Relation,Sql,给定一个表定义: Articles: art_id | name -------|-------------- 1 | article1 2 | article2 3 | article3 Tags: tag_id | description -------|-------------- 1 | Scientific 2 | Long 3 | Short article_tags: art_id
Articles:
art_id | name
-------|--------------
1 | article1
2 | article2
3 | article3
Tags:
tag_id | description
-------|--------------
1 | Scientific
2 | Long
3 | Short
article_tags:
art_id | tag_id
-------|---------
1 | 1
1 | 2
2 | 1
2 | 3
3 | 1
3 | 2
3 | 3
问题是如何选择既科学又简短的所有文章
请注意,它应该是[2..N)标签组合的通用
谢谢您的帮助。您可以使用以下查询获得结果:
select a.art_id, a.name
from articles a
inner join article_tags at
on a.art_id = at.art_id
inner join tags t
on at.tag_id = t.tag_id
where t.description in ('Short', 'Scientific') -- tags here
group by a.art_id, a.name
having count(distinct t.tag_id) = 2 -- total count of tags here
看
或者可以这样写:
select a.art_id, a.name
from articles a
inner join article_tags at
on a.art_id = at.art_id
inner join tags t
on at.tag_id = t.tag_id
group by a.art_id, a.name
having
sum(case when t.description = 'Short' then 1 else 0 end) >= 1 and
sum(case when t.description = 'Scientific' then 1 else 0 end) >= ;
看
如果您只想返回文章id,则只需查询article\u标签
表:
select art_id
from article_tags
where tag_id in (1, 3)
group by art_id
having count(distinct tag_id) = 2
请参见请将您的sql标记替换为您正在使用的RDBMS(MySQL、sql Server、Oracle等)的特定sql标记。最佳答案取决于您正在使用的版本。可能重复的
SELECT *
FROM articles
WHERE art_id IN
(
SELECT art_id
FROM article_tags
GROUP BY art_id
HAVING COUNT(art_id) > 1
)