多对多表关联,多条件查询

_BiuBiu 发布于 2017/09/25 15:38
阅读 445
收藏 0

有三个表

user{id,name}

user_to_group{user_id,group_id}

group{id,name}

可以看出user和group为多对多的关系,用户可以有多个分组

现在有一个搜索功能,有多个group作为条件去查询用户,比如要查找出group_id=1并且group_id=2的用户来,sql语句写法如下:

select u.* from user u left join user_to_group r on u.id=r.user_id

left join group g on r.group_id = g.id

where  g.id=1 

???

上述sql只是能查出group_id=1的用户数据来,但如果我想查出既满足g.id=1的数据同事又满足g.id=2的用户数据来,该怎么写呢? 试过and,查不出来,如果用or或者in的话,也不行,那样查出来的是满足任意一个条件的数据,不是全部同时满足。想在hibernate中实现这个功能,但最基准的sql都书写的不对

求知求学求大神~

 

加载中
0
两广总督bogang
两广总督bogang

select user_id, count(*) from user_to_group where group_id in (1,2) group by user_id having count(*)=2

_BiuBiu
_BiuBiu
666,可用,比我想的简单,我最后想出来的办法是再关联一遍user_to_group 用两个别名分别=1 =2,沉迷于数据库基础增删改无法自拔的我,再回头看这些聚合函数竟然一时没看懂,多谢高玩解答
0
Tuesday
Tuesday

g.id IN (1,2)

_BiuBiu
_BiuBiu
in不行,查出来的是满足1和2任一一个条件的数据,我要查出满足=1并且=2的数据来
0
TWINKER
TWINKER

一个字段怎么能同时满足即等于1有等于2呢,你是不是打错啦

_BiuBiu
_BiuBiu
真心没错,多对多就是会出现这种关系
0
l
liangna

union all

_BiuBiu
_BiuBiu
union all是合并吧,最后的结果还是or的关系,满足任意条件即可的
0
哈哈2725458
哈哈2725458

3楼正解   先找出用户  在去满足自己需求

_BiuBiu
_BiuBiu
恩恩,多谢多谢
返回顶部
顶部