如何使用MySQL基于ID列筛选组织类账户子账户并排除个人类子账户
我来帮你解决这个问题,先明确需求:我们需要从表格里筛选出组织类主账户(AccountType='O')对应的子账户——也就是那些和主账户ID相同、但AccountType为空的行,同时排除个人类主账户(AccountType='P')的子账户。
首先先把你的源数据整理成更清晰的表格:
源表格数据
| ID | AccountType | Name | Individ |
|---|---|---|---|
| 1 | O | Acme Company | 00 |
| 2 | P | Joe Smith | 00 |
| 1 | John Doe | 01 | |
| 1 | Steve Johnson | 02 | |
| 3 | P | Shirley Johnson | 00 |
| 2 | Jane Smith | 01 | |
| 1 | Kevin Lastname | 03 |
下面提供两种高效的MySQL实现方案:
方案一:子查询筛选组织类主账户ID
SELECT t.* FROM your_table_name t WHERE t.AccountType IS NULL AND t.ID IN ( SELECT DISTINCT ID FROM your_table_name WHERE AccountType = 'O' );
逻辑解释:
- 子查询先提取所有组织类主账户的唯一ID(这里就是ID=1);
- 外层查询筛选出「AccountType为空(子账户特征)」且「ID属于组织类主账户ID列表」的行,精准定位目标子账户。
方案二:JOIN关联主账户信息
SELECT t.* FROM your_table_name t JOIN your_table_name main_account ON t.ID = main_account.ID WHERE t.AccountType IS NULL AND main_account.AccountType = 'O';
逻辑解释:
- 通过JOIN将每一行与同ID的主账户行关联;
- 同时筛选两个条件:当前行是子账户(AccountType为空),且关联的主账户是组织类型(AccountType='O')。
执行结果
用你的源数据运行上述任意SQL,都会得到以下目标子账户:
| ID | AccountType | Name | Individ |
|---|---|---|---|
| 1 | John Doe | 01 | |
| 1 | Steve Johnson | 02 | |
| 1 | Kevin Lastname | 03 |
内容的提问来源于stack exchange,提问作者Tim N
相关产品推荐
相关产品推荐

