MySQL中如何根据API传入的ID动态获取相反性别的用户记录?
优化获取相反性别用户的查询逻辑
嘿,我来帮你简化这个操作!你当前分两次查询的方式是可行的,但我们可以把这两步合并成单条SQL语句,减少数据库交互次数,效率会更高哦。
先再明确下你的表结构和数据:
| id | Name | Gender | Age |
|---|---|---|---|
| 1 | Arun | Male | 23 |
| 2 | Neha | Female | 22 |
| 3 | Sheetal | Female | 21 |
| 4 | Vikas | Male | 20 |
优化后的SQL语句
直接用子查询来完成需求,一次查询就能得到结果:
SELECT * FROM tb_user WHERE Gender != (SELECT Gender FROM tb_user WHERE id = 1);
语句解释
- 内层的子查询
(SELECT Gender FROM tb_user WHERE id = 1)会先获取到id=1用户(也就是Arun)的性别Male - 外层查询则筛选出所有性别不等于
Male的用户,最终会返回Neha、Sheetal这两条记录
额外提示
如果担心传入的id可能不存在(比如id=100),子查询会返回NULL,这时候Gender != NULL不会匹配任何记录。如果想处理这种情况,可以用COALESCE设置一个默认值,比如:
SELECT * FROM tb_user WHERE Gender != COALESCE((SELECT Gender FROM tb_user WHERE id = 1), 'Unknown');
不过如果你的业务场景中传入的id一定存在,那前面的基础版本就足够啦。
内容的提问来源于stack exchange,提问作者Pandat Arun
相关产品推荐
相关产品推荐

