我试图查找表a中活动的成员,并确保它们位于表b中相应的用户组中。返回的行应该是不匹配的:不在组56中的活动用户,或不在组56中的非活动用户。
表b本质上只是一个外键表,用户将根据分配给的组数显示多次。我只关心56组。
我已经让它工作了,除了一个事实,我得到了每个用户对应的组总数返回多行。
Table A Table B
----------------- ------------------------
m_id|name|email|active group_id | user_id | etc
01 |Abby|a@b.c| 1 01 | 01 | etc
02 |Bob |b@b.c| 1 56 | 01 | etc
03 |Carl|c@b.c| 1 56 | 02 | etc
04 |Dan |d@b.c| 0 02 | 02 | etc
66 | 02 | etc
99 | 02 | etc
01 | 03 | etc
56 | 04 | etc
mysql查询如下:
SELECT * FROM B LEFT JOIN A
ON B.user_id = A.m_id
WHERE (B.group_id = 56 AND A.active != 1)
OR
(B.user_id NOT IN
(SELECT DISTINCT B.user_id FROM B
LEFT JOIN A ON B.user_id = A.m_id
WHERE B.group_id = 56) AND A.active = 1)
1条答案
按热度按时间brvekthn1#
您当前的方法可以通过使用
Group By
使用条件筛选Having
条款。我们将使用
Sum()
带条件的函数检查group_id = 56
一排。它将返回1或0,这取决于它是真是假。如果我们想让一个特定的情况至少发生一次,那么Sum()
此条件的值应大于0,反之亦然。