我有以下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
不幸的是,我找不到合适的查询。我很感激你的帮助。
答案 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。