![](/img/trans.png)
[英]How do I copy rows from one MySQL table to another and update one of the values based on a variable
[英]How do I select rows from one table filtered by another table in MySQL?
我有一个表成员 :
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
使用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
在您的情况下, 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.