嗨,我需要选择一些用户邮件,我不明白如何。
我有3张桌子。
用户,付款和代码
当一个用户付费(无代码)时,会在付款表中添加一行,我们会有类似
的内容<strong>Payement Table</strong>
+----+--------+--------+--------+
| Id | UserId | Amount | CodeId |
+----+--------+--------+--------+
| 01 | 2545 | 20 | 0 |
+----+--------+--------+--------+
如果同一位用户现在使用代码付款
<strong>Payement Table</strong>
+----+--------+--------+--------+
| Id | UserId | Amount | CodeId |
+----+--------+--------+--------+
| 01 | 2545 | 20 | 0 |
| 02 | 2545 | 5 | 42 |
+----+--------+--------+--------+
我想要的是选择已经付款的所有客户,而不是已经使用该代码的客户(在这种情况下CodeId = 42)。
所以我试过这个
SELECT mail
FROM User "
INNER JOIN payement ON User.id = payement.UserId
WHERE payement.CodeId<>42
AND payement.amount>0
GROUP BY mail
我的问题是:
我仍然有客户使用此请求的代码。我想我知道为什么。但我应该使用WHERE NOT EXISTS吗?怎么样 ?
答案 0 :(得分:1)
如果用户在未使用代码的情况下付款,您将获得codeid = 0
。如果是这样,请尝试:
SELECT mail
FROM User
INNER JOIN payement ON User.id = payement.UserId
WHERE payement.CodeId = 0
AND payement.amount > 0
GROUP BY mail
答案 1 :(得分:0)
您应该使用in
或not in
子句来实现多条件
SELECT mail FROM User
INNER JOIN payement
ON User.id = payement.UserId
WHERE payement.CodeId not in (0,42) and payement.amount > 0 GROUP BY mail
如果您想要哪些客户使用代码= 0,那么
SELECT mail FROM User
INNER JOIN payement
ON User.id = payement.UserId
WHERE payement.CodeId in (0) and payement.amount > 0 GROUP BY mail
如果您想要哪些客户不使用代码!= 0则
SELECT mail FROM User
INNER JOIN payement
ON User.id = payement.UserId
WHERE payement.CodeId not in (0) and payement.amount > 0 GROUP BY mail