繁体   English   中英

如何从一个表中选择被MySQL中的另一个表过滤的行?

[英]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

查找演示SQLFIDDLE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM