Mysql 选择仅存在于一个特定列表(phplist)中的用户
我需要一个MYSQL查询来识别phplist上的所有订阅者,这些订阅者只在一个列表中,列表ID为126 涉及两张桌子 一,。phplist_user_user 2.phplist_列表用户 phplist_listuser有两个名为“userid”和“listid”的字段值得关注。 phplist_user_user还有一个“userid”,它是该表中用户字段的键 我们需要一个将列出以下内容的查询: phplist_user_user中用户的所有详细信息 在phplist_listuser上有listid 126的条目 和仅在listid 126上,因此它们在phplist_listuser中应该只有listid 126的条目,如果它们有任何其他列表,则不应包括它们 因此,为了重新表述上述内容,我们希望: listid 126上但不在任何其他列表中的用户的用户详细信息 下面是表的示例Mysql 选择仅存在于一个特定列表(phplist)中的用户,mysql,sql,phplist,Mysql,Sql,Phplist,我需要一个MYSQL查询来识别phplist上的所有订阅者,这些订阅者只在一个列表中,列表ID为126 涉及两张桌子 一,。phplist_user_user 2.phplist_列表用户 phplist_listuser有两个名为“userid”和“listid”的字段值得关注。 phplist_user_user还有一个“userid”,它是该表中用户字段的键 我们需要一个将列出以下内容的查询: phplist_user_user中用户的所有详细信息 在phplist_listuser上有l
phplist_listuser
userid listid
1 126
1 32
1 51
2 126
3 126
4 126
5 126
5 127
6 128
在这个查询中,我只希望从phplist_user_user获得ID为2、3、4的用户详细信息,而不是其他用户的详细信息,因为它们不在126或126上,但也在其他列表上
有人能帮我吗
SELECT * FROM phplist_listuser
WHERE listid <=> 126;
上面的方法可以获取列表126中的每个用户ID,但我现在需要能够检查该用户是否不在任何其他列表中,然后从phplist_user_user获取完整信息
提前感谢,如果这是显而易见的,我很抱歉,但我做了一些工作和研究,无法解决问题。一种方法是使用EXISTS和notexists:
select *
from phplist_user_user uu
where exists (select * from phplist_listuser lu where lu.listid = 126 and lu.userid = uu.userid)
and not exists (select * from phplist_listuser lu where lu.listid <> 126 and lu.userid = uu.userid);
MySQL具有允许您在选择中使用非聚合列的
这只是为了表明,这可以在MySQL中完成,而无需使用subselect
select *
from phplist_user_user
where userid in
(
select lu.userid
from phplist_listuser lu
group by lu.userid
having min(lu.listid) = 126 and max(lu.listid) = 126
);
SELECT u.*,lu.listid FROM phplist_user_user u
JOIN phplist_listuser lu USING (userid)
GROUP BY u.userid
HAVING COUNT(DISTINCT lu.listid)=1 AND lu.listid=126;