我有一个表成员:
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。
答案 0 :(得分: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
答案 1 :(得分:0)
使用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;
答案 2 :(得分: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
在您的情况下, join-predicate 为m.member_id = b.member_id
。
答案 3 :(得分:0)
- 大多数答案都没有解决您的关键问题 - 所有赌注都不仅仅是其中一个 - 你去吧
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)
答案 4 :(得分:0)
试试这个
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