我正在尝试根据以下条件筛选结果以向我展示:我将写下我正在尝试的内容:
我有 4 个表:users、rp、rpa、rpud - 所有表都以 rfID 作为键,这是 users 表中的 PK
现在我正在尝试的是:Membership = 1 是基本成员(member)
- 查询users表和rp,rpa,rpud表,如果用户是普通成员(member),并且从未注册过成员(member)[如果他以前是成员(member),然后又成为成员(member),则其记录可以存在于rp,rpa中基本成员(member)。] 并且已达到他/她的最大下载次数 3,我应该能够只显示这些人
这是我正在尝试的,但似乎是错误的:
SELECT
id,firstname,lastname, membership
FROM
users
where membership = 1
and users.rfID not in (select rfID from rp) or users.rfID not in (select rfID from rpa)
and count(rpud.rfID) <= 3
最佳答案
首先,您需要将逻辑从 or
更改为 and
。您希望所有这些条件都成立。
其次,除非您首先在 from
子句中声明表名称,否则您不能提及表名称。以下内容应该满足您的要求:
SELECT id, firstname, lastname, membership
FROM users u
where u.membership = 1 and
u.rfID not in (select rfID from rp) and
u.rfID not in (select rfID from rpa) and
u.rfId not in (select rfID from rpud group by rfid having count(*) > 3);
编辑:
为了提高性能,请尝试将这些更改为join
:
SELECT id, firstname, lastname, membership
FROM users u left join
rp
on rp.rfID = u.rfID left join
rpa
on rpa.rfID = u.rfID left join
(select rfID
from rpud
group by rfid
having count(*) > 3
) rpud
on rpud.rfID = u.rfId
where u.membership = 1 and rp.rfID is null and rpa.rfID is null and rpud.rfID is null;
关于mysql查询根据计数标准过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27228145/