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`
FROM  `request` 
JOIN  `donor` ON  `donor`.`ID` =  `request`.`USER_ID` 
JOIN  `city` ON  `city`.`ID` =  `request`.`LOCATION` 
ORDER BY  `request`.`DATE` 

ここで、期待しているすべての行を取得しています...

ただし、列 count( ) が追加されたこの 2 番目のクエリは、テーブルresponse.IDに存在する行が 1 つしかないため、カウント 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` 

ここで私が期待しているのは、クエリがテーブルからすべての行を返し、それが 0 であるか任意の整数であるかにかかわらず、requestカウントを返すことです。response

他の質問で使用されている戦略を使用しようとしましたが、うまくいきませんでした。彼らがこれに対する解決策であるかどうか私に提案してください。何もない場合は、カウントのためだけに別のクエリを作成するオプションが 1 つしかありません。

4

2 に答える 2

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` 
于 2013-11-08T10:17:03.740 に答える