我有一个表成员:
member_id, points
我还有另一桌赌注:
member_id, finished
考虑表成员的以下数据:
1 0
2 15000
3 0
对于投注:
1 -1
1 0
2 1
3 1
3 -1
在表中,已完成投注= -1 表示投注失败,0 表示未完成,1 表示获胜。如何选择积分为 0 且所有投注都已完成的会员 ID?使用我给出的数据,它应该返回成员 id = 3 的一行。
您可以使用 EXISTS 子句:
select members.id
from members
where
points=0
and not exists (select null from bets where bets.id=members.id and status=0)
您还可以使用 LEFT JOIN:
select members.id
from
members left join bets
on members.id = bets.id
and bets.status=0
where
bets.id is null
and members.points=0
使用 a JOIN
,像这样:
select members.member_id, members.points, bets.finished
from members
join bets on bets.member_id = members.member_id
where bets.finished <> 0 and members.points = 0;
您可以使用内部联接
SELECT member_id FROM members m
INNER JOIN bets b
ON m.member_id = b.member_id
WHERE b.finished = 0 AND m.points = 0
内连接是应用程序中最常见的连接操作,可以视为默认连接类型。内连接通过基于连接谓词组合两个表(A 和 B)的列值来创建一个新的结果表。该查询将 A 的每一行与 B 的每一行进行比较,以找到满足连接谓词的所有行对。当满足连接谓词时,将 A 和 B 的每对匹配行的列值组合成一个结果行。
http://en.wikipedia.org/wiki/Join_(SQL)#Inner_join
在您的情况下,连接谓词是m.member_id = b.member_id
.
-- 大多数答案都没有解决您的关键问题 -- 所有的赌注都被下注而不仅仅是其中一个 -- 给你
Select memberid
from members
where points = 0
and member id not in (select member id from bets where bet <> -1 )
或者随着数据增长到非常高的容量,效率更高
Select memberid
from members
where points = 0
and member id not in (select member id from bets where bet <> -1 and bets.memberid = members.memberid)
试试这个
SELECT m.member_id , b.finished FROM members m
INNER JOIN bets b
ON m.member_id = b.member_id
WHERE m.points = 0
and b.finished = 1