SQL查找子项在多行上匹配的父项
我有一个数据库,其中一个SQL查找子项在多行上匹配的父项,sql,postgresql,Sql,Postgresql,我有一个数据库,其中一个用户有多个提交,一个提交有多个帖子 我想找到所有使用标签“car”和标签“bike”发布帖子的用户 以下是我尝试过的查询,它无法运行,因为它只查找一个标签为“car”和“bike”的帖子 如何正确构造此查询,使其返回使用标记“car”发表文章和使用标记“bike”发表文章的用户?如果您只需要名称,可以尝试使用count distinct=和tag=card或tag=bike检查用户 select u.name from users inner join submi
用户
有多个提交
,一个提交
有多个帖子
我想找到所有使用标签“car”和标签“bike”发布帖子的用户
以下是我尝试过的查询,它无法运行,因为它只查找一个标签为“car”和“bike”的帖子
如何正确构造此查询,使其返回使用标记“car”发表文章和使用标记“bike”发表文章的用户?如果您只需要名称,可以尝试使用count distinct=和tag=card或tag=bike检查用户
select u.name
from users
inner join submission s on u.name = s.user_name
inner join post rp on s.id = rp.submission_id
where rp.tag = 'car' OR rp.tag = 'bike'
group by u.name
having count(distinct rp.tag) = 2
如果您需要所有用户信息,则应将此结果与用户一起加入
select u.*
from users u
inner join (
select u.name
from users
inner join submission s on u.name = s.user_name
inner join post rp on s.id = rp.submission_id
where rp.tag = 'car' OR rp.tag = 'bike'
group by u.name
having count(distinct rp.tag) = 2
) t on t.name = u.name
select u.*
from users u
inner join (
select u.name
from users
inner join submission s on u.name = s.user_name
inner join post rp on s.id = rp.submission_id
where rp.tag = 'car' OR rp.tag = 'bike'
group by u.name
having count(distinct rp.tag) = 2
) t on t.name = u.name