特殊的SELECT语句

时间:2015-05-05 13:13:54

标签: mysql

我有以下MySQL表:

USERS(uid,name)   USERS_GROUPS(u_id,r_id,flag)       REQUESTS(rid,status)
------------------------------------------------------------------------
1  John             1  96   1                       96    0
2  Peter            1  97   1                       97    0
3  Helen            2  97   0                       98    0 
                    3  97   0                       99    1 
                    2  98   1
                    1  98   0
                    3  98   0

上面,您可能会看到一些示例数据。用户到USERS_GROUPS 1:N,请求USERS_GROUPS 1:N(u_id,r_id PKs和FKs)。 USERS_GROUPS中具有相同r_id的每条记录都被视为属于同一组。

我想从USERS_GROUPS中选择那些与某个uid(例如1)和某个状态(例如0)相关联的记录,只有当该标志等于1.但是,在这种情况下,我希望SELECT包含所有其集团的记录。换句话说,根据样本数据,我想得到以下结果:

1  96   1
1  97   1
2  97   0
3  97   0

不幸的是,我找不到合适的查询。我很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

SELECT USERS_GROUPS.u_id,USERS_GROUPS.r_id,USERS_GROUPS.flags
FROM USERS_GROUPS
WHERE r_id IN (SELECT USERS_GROUPS.r_id
               FROM USERS_GROUPS, REQUESTS
               WHERE u_id='1' AND r_id=rid AND status='0'); 

答案 1 :(得分:0)

您可以尝试以下方法:

SELECT ug.*
  FROM user_groups ug
  JOIN user_groups ugo
    ON ugo.flag = :flag
   AND ugo.u_id = :u_id
   AND ugo.r_id = ug.r_id
  JOIN requests ro
    ON ro.rid = ugo.r_id
   AND ro.status = :status

这会找到user_groups(ugo)的请求(ro)与条件匹配,并从同一请求(ug)加入所有user_group。

使用您提供的示例查看SQLFiddle