基于MySQL实现按传入carid关联查询docs表目标数据
MySQL查询需求解决方案
现有数据表
docs表
| id | carid | name |
|---|---|---|
| 1 | 1 | doc1 |
| 2 | 1 | doc2 |
| 3 | 2 | doc3 |
| 4 | 1 | doc4 |
| 5 | 5 | doc5 |
cars表
| carid | parentid | name |
|---|---|---|
| 1 | 4 | car1 |
| 2 | 5 | car2 |
| 3 | 4 | car3 |
| 4 | 4 | car4 |
| 5 | 5 | car5 |
查询需求
编写MySQL查询语句,传入指定carid到WHERE子句,获取docs表中所有关联cars表parentid与传入carid对应的parentid一致的行。
期望结果:
- 传入
carid=3时,返回docs表中id为1、2、4的行(因carid=3的parentid为4,cars表中carid1、3、4的parentid均为4); - 传入
carid=2时,返回docs表中id为3、5的行(因carid=2的parentid为5,cars表中carid2、5的parentid均为5)。
实现语句
这里提供两种可行的SQL写法:
子查询方式
SELECT d.* FROM docs d JOIN cars c ON d.carid = c.carid WHERE c.parentid = (SELECT parentid FROM cars WHERE carid = 3);
将语句中的3替换为你需要传入的目标carid即可。
JOIN关联方式
SELECT d.* FROM docs d JOIN cars c1 ON d.carid = c1.carid JOIN cars c2 ON c1.parentid = c2.parentid WHERE c2.carid = 2;
同样,把2替换成目标carid就能得到对应结果。
这两种写法都能满足需求,原理都是先定位目标carid对应的parentid,再筛选出所有拥有该parentid的carid,最后匹配docs表中的关联数据。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

