簡體   English   中英

連接兩個表並在單個查詢中返回數據和計數

[英]Join two tables and return data and count in a single query

鏈接sqlfiddle

我有這個表:

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           |

我想獲取 parent_id 的列表以及 project_id 的計數。 我將在類似 where 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;

目前還不清楚您為什么在這里使用LEFT JOIN 第二個表中的列聚合是一種不好的做法。 所以,你可能只想要一個INNER JOIN

如果你想要所有的父 id s,那么反轉表:

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM