Mysql Count with join,其中应使用外键为表B中的每一行计算表A中的行数

Mysql Count with join,其中应使用外键为表B中的每一行计算表A中的行数,mysql,join,count,Mysql,Join,Count,我准备了一个多表联接的查询。 我通过这个查询得到了一个完美的结果: SELECT `request`.`ID` , `request`.`USER_ID` , `donor`.`FULL_NAME` , `request`.`BLOOD_GROUP`, `request`.`UNITS` , `city`.`NAME` AS `LOCATION`, `city`.`ID` AS `LOCATION_ID` , `request`.`DATE` , `request`.`EXPIRE

我准备了一个多表联接的查询。 我通过这个查询得到了一个完美的结果:

SELECT
`request`.`ID` ,  `request`.`USER_ID` ,  `donor`.`FULL_NAME` ,
`request`.`BLOOD_GROUP`, `request`.`UNITS` ,  `city`.`NAME` AS  `LOCATION`,
`city`.`ID` AS  `LOCATION_ID` ,  `request`.`DATE` ,  `request`.`EXPIRES_ON` ,
`request`.`ADDRESS` ,  `request`.`STATUS`
FROM  `request` 
JOIN  `donor` ON  `donor`.`ID` =  `request`.`USER_ID` 
JOIN  `city` ON  `city`.`ID` =  `request`.`LOCATION` 
ORDER BY  `request`.`DATE` 
在这里,我得到了所有我期待的行

但是,第二个查询添加了一个列计数(
response.ID
)生成了一个计数为1的行,因为
response
表中只有一行

这是修改后的查询:

SELECT 
`request`.`ID` ,  `request`.`USER_ID` ,  `donor`.`FULL_NAME` ,
`request`.`BLOOD_GROUP` ,  `request`.`UNITS` ,  `city`.`NAME` AS  `LOCATION` ,
`city`.`ID` AS  `LOCATION_ID` ,  `request`.`DATE` ,  `request`.`EXPIRES_ON` ,
`request`.`ADDRESS` ,  `request`.`STATUS`, count(`response`.`ID`) AS `RESPONSE`
FROM  `request` 
JOIN  `donor` ON  `donor`.`ID` =  `request`.`USER_ID` 
JOIN  `city` ON  `city`.`ID` =  `request`.`LOCATION`
JOIN `response` ON `response`.`REQUEST_ID` = `request`.`ID`
ORDER BY  `request`.`DATE` 
这里我希望查询返回
request
表中的所有行,并返回
response
中的计数,无论它是0还是任何整数

我试着使用其他问题中使用的策略,但没有奏效。 请告诉我他们是否有任何解决方案。
如果没有,那么我只有一个选择,那就是进行另一个查询,只进行计数。

使用左连接而不是内部连接

SELECT 
    `request`.`ID` ,  `request`.`USER_ID` ,  `donor`.`FULL_NAME` ,
    `request`.`BLOOD_GROUP` ,  `request`.`UNITS` ,  `city`.`NAME` AS  `LOCATION` ,
    `city`.`ID` AS  `LOCATION_ID` ,  `request`.`DATE` ,  `request`.`EXPIRES_ON` ,
    `request`.`ADDRESS` ,  `request`.`STATUS`, count(`response`.`ID`) AS `RESPONSE`
FROM  `request` 
    JOIN  `donor` ON  `donor`.`ID` =  `request`.`USER_ID` 
    JOIN  `city` ON  `city`.`ID` =  `request`.`LOCATION`
    LEFT JOIN `response` ON `response`.`REQUEST_ID` = `request`.`ID`
ORDER BY  `request`.`DATE` 

一位同事帮我找到了一个更好、资源友好的解决方案

我查询的计数行是统计的,完全取决于插入到
响应
表中或从中删除的任何行。 因此,他建议在
request
表中添加
RESPONSE
列,并在插入或删除时更新值,而不是运行复杂的查询

所以,在
response
表的INSERT和DELETE查询之后,我更改了程序并编写了一个更新查询

有时候,简单的解决方案比复杂的方法要好得多


谢谢。

对不起,忘了提一下,我也尝试了左连接,但产生了相同的结果。