Mysql 联接两个表并在单个查询中返回数据和计数
链接 我有以下表格:Mysql 联接两个表并在单个查询中返回数据和计数,mysql,sql,Mysql,Sql,链接 我有以下表格: CREATE TABLE IF NOT EXISTS `project` ( `project_id` int(6) unsigned NOT NULL, `id_location` varchar (50) not null, PRIMARY KEY (`project_id`))DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `location` ( `location_id` int(6)
CREATE TABLE IF NOT EXISTS `project` (
`project_id` int(6) unsigned NOT NULL,
`id_location` varchar (50) not null,
PRIMARY KEY (`project_id`))DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `location` (
`location_id` int(6) unsigned NOT NULL,
`parent_id` varchar (50) not null,
PRIMARY KEY (`location_id`))DEFAULT CHARSET=utf8;
INSERT INTO `project` (`project_id`, `id_location`) VALUES
('1', '4'),
('2', '4'),
('3', '4'),
('4', '5'),
('5', '5'),
('6', '6'),
('7', '7');
INSERT INTO `location` (`location_id`, `parent_id`) VALUES
('2', '1'),
('3', '1'),
('4', '2'),
('5', '2'),
('6', '3'),
('7', '3');
我使用此查询获得以下结果:
SELECT project.project_id
, project.id_location
, location.parent_id
FROM project
LEFT
JOIN location
ON project.id_location = location.id
| project_id | id_location | parent_id |
| 1 | 4 | 2 |
| 2 | 4 | 2 |
| 3 | 4 | 2 |
| 4 | 5 | 2 |
| 5 | 5 | 2 |
| 6 | 6 | 3 |
| 7 | 7 | 3 |
我想获得父项id的列表以及项目id的计数。我将在类似于parent_id=x的条件后使用
|parent_id | countofproject_id
| 2 | 5
| 3 | 2
这看起来像一个聚合:
SELECT l.parent_id, COUNT(*)
FROM project p LEFT JOIN
location l
ON p.id_location = l.id
GROUP BY l.parent_id;
不清楚为什么在这里使用左连接。按第二个表中的列进行聚合是一种不好的做法。所以,您可能只需要一个内部联接
如果需要所有父ID,请反转表格:
SELECT l.parent_id, COUNT(p.id_location)
FROM location l LEFT JOIN
project p
ON p.id_location = l.id
GROUP BY l.parent_id;
提供的sqlfiddle链接请以表格文本形式向我们显示所需结果。所需结果是什么样的?请相应地编辑您的问题。您可以使用两个表之间的内部联接,并按家长分组。谢谢。您的解决方案适用于我的初始请求。我现在还想更进一步,我想得到如下结果:选择l.*,选择l.parent\u id,COUNT*从项目p内部连接位置l ON p.id\u location=l.id按l.parent\u id分组计数。从位置l。其中,l.parent_id=2,l.published=1。按count desc排序@加泰林。这回答了你在这里提出的问题。如果你没有问出你想问的问题,就要问一个新问题。这个问题得到了回答。