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查询之后,我更改了程序并编写了一个更新查询
有时候,简单的解决方案比复杂的方法要好得多
谢谢。对不起,忘了提一下,我也尝试了左连接,但产生了相同的结果。