MySQL中如何用WHERE子句筛选Round 1出现过的ID的所有行?
解决方案:筛选出Round 1中出现过的ID的所有行
别担心术语使用的问题,新手刚开始接触SQL都有这个过程~针对你的需求,我给你两种MySQL里实用的实现方法,都能精准得到你想要的结果:
方法一:使用IN子查询
这是最直观的写法,先找出所有在Round=1里出现过的ID,再筛选所有包含这些ID的行:
SELECT * FROM your_table_name WHERE ID IN ( -- 先获取Round=1的所有唯一ID SELECT DISTINCT ID FROM your_table_name WHERE Round = 1 );
解释:
- 内层的子查询
SELECT DISTINCT ID ... WHERE Round = 1会返回所有在Round1中出现过的ID(你的例子里就是1和4),加上DISTINCT是为了避免重复的ID(哪怕你的数据里没有重复,这个操作也能让查询更严谨)。 - 外层查询通过
ID IN (...),把所有ID属于这个集合的行都筛选出来,正好就是你要保留的ID1和4的所有行。
方法二:使用自连接(INNER JOIN)
如果你想尝试另一种思路,可以用表的自连接来实现:
SELECT DISTINCT t1.* FROM your_table_name t1 INNER JOIN your_table_name t2 ON t1.ID = t2.ID WHERE t2.Round = 1;
解释:
- 我们把同一张表分别命名为
t1和t2,t2的作用是筛选出Round=1的ID; - 通过
INNER JOIN让t1和t2的ID匹配,这样t1里就只保留了t2中存在的ID(也就是Round1出现过的ID); - 加上
DISTINCT是为了避免因为t2里同一个ID重复出现而导致t1的行被重复查询出来。
注意事项
记得把代码里的your_table_name替换成你实际使用的表名哦~两种方法都能达到你的要求,新手推荐先从第一种子查询的写法入手,更容易理解逻辑。
内容的提问来源于stack exchange,提问作者MEF
相关产品推荐
相关产品推荐

