如何解决合并两个表中的行/列-JOIN子句
在链接中,看到我的SQLFIDDLE,然后看到b
CREATE TABLE Projects
(`p_id` int,`project_title` varchar(9),`l_id` int);
INSERT INTO Projects
(`p_id`,`project_title`,`l_id`)
VALUES
(1,'A',6),(2,'B',(3,'C',7),(4,'D',8),(5,'E',9),(6,'F',10);
CREATE TABLE Locations
(`l_id` int,`title` varchar(9),`parent_id` int );
INSERT INTO Locations
(`l_id`,`title`,`parent_id`)
VALUES
(1,'Country',0),'District1',1),'District2','District3','District4','Loc 5',2),(7,'Loc 6',3),(8,'Loc 7',(9,'Loc 8',4),(10,'Loc 9',(11,'Loc 10',(12,'Loc 11',5);
我想实现这一目标:
+------+-----------+-------------+
| L_ID | Title | count P_ID |
+------+-----------+-------------+
| 2 | District1 | 2 |
| 3 | District2 | 2 |
| 4 | District3 | 2 |
| 5 | District4 | 0 |
+----+------------+------+-------+
我尝试过INNER JOIN和LEFT OUTER JOIN。我能实现的一切如下所示,对我没有帮助:
+------+-----------+----------------------+
| L_ID | Title | parent_id | counted |
+------+-----------+------------+---------+
| 6 | Loc 5 | 2 | 2 |
| 7 | Loc 6 | 3 | 2 |
| 9 | Loc 8 | 4 | 2 |
+---- -+-----------+------------+---------+
Locations表是一个嵌套表,如果这很重要的话。我需要计算每个分区中的项目,并获取分区名称。
我尝试过:
SELECT l.*,COUNT(p.l_id) AS thecounted
FROM locations l
INNER JOIN projects p ON p.l_id = l.l_id
GROUP BY l.parent_id
和
SELECT l.*,COUNT(p.l_id) AS thecounted
FROM locations l
LEFT OUTER JOIN projects p on l.l_id = p.l_id
GROUP BY l.parent_id
解决方法
考虑两个联接:
select d.l_id,d.title,count(p.l_id) count_p_id
from locations d
left join locations l on l.parent_id = d.l_id
left join projects p on p.l_id = l.l_id
where d.parent_id = 0
group by d.l_id,d.title
查询从其父级为d
的地区列表(0
)开始。然后,它向下一层到位置(l
),并查找相应的项目(p
)。最后一步是聚合。
GMB解决方案返回这1行
l_id title count_p_id
1 Country 0
使用此脚本版本
select d.l_id,d.title
我们在略微校正条件的情况下获得了预期的结果
where d.parent_id = 1
结果:
l_id title count_p_id
2 District1 2
3 District2 2
4 District3 2
5 District4 0
很抱歉,发布答案而不是简单的评论就足够了,但是还没有足够的信誉。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。