当结果集为空时,我可以返回0作为结果吗
SELECT
SUM(`Uren`),
SUM(`Minuten`)
FROM
`Uren`
RIGHT JOIN `Project`
ON `Project`.`idProject` = `Uren`.`idProject`
RIGHT JOIN `Uursoort`
ON `Uursoort`.`idUursoort` = `Uren`.`idUursoort`
WHERE `idKlant` = 5
AND `Uren`.`Datum` > '2014-04-02'
GROUP BY `Uren`.`idProject`
首选输出(而不是空结果集):
sum('Uren') sum('Minuten')
0 0
当我这样做时:
SELECT
SUM(`Uren`),
SUM(`Minuten`)
FROM
`Uren`
RIGHT JOIN `Project`
ON `Project`.`idProject` = `Uren`.`idProject`
RIGHT JOIN `Uursoort`
ON `Uursoort`.`idUursoort` = `Uren`.`idUursoort`
WHERE `idKlant` = 5
AND `Uren`.`Datum` > '2014-04-02'
GROUP BY `Uren`.`idProject
因为有数据,所以我得到了正确的输出。但我需要得到 0 作为返回。 我也在模型中尝试过这个:
function rapport_detail_uren($idKlant,$start,$eind){
$this->db->select_sum('Uren');
$this->db->select_sum('Minuten');
$this->db->from('Uren');
$this->db->join('Uursoort','Uursoort.idUursoort=Uren.idUursoort','right');
$this->db->join('Project','Project.idProject=Uren.idProject','right');
if ($idKlant > 0){
$this->db->where('idKlant',$idKlant);}
if ($start != NULL){
$this->db->where('Uren.Datum >=', $start);
}
$this->db->group_by('Uren.idProject');
$query = $this->db->get();
if($query->num_rows()>0){
return $query->result();
}
else{
return 0;
}
}
最后一行返回 0。我想这可能会返回值 0,但这不起作用
最佳答案
您可以通过移动where
来做到这一点条件进入on
除最后一个表之外的所有表的子句(因为您正在使用 right outer join
:
SELECT coalesce(SUM(`Uren`), 0), coalesce(SUM(`Minuten`), 0)
FROM `Uren` RIGHT JOIN
`Project`
ON `Project`.`idProject` = `Uren`.`idProject` AND
`Uren`.`Datum` > '2014-04-02' RIGHT JOIN
`Uursoort`
ON `Uursoort`.`idUursoort` = `Uren`.`idUursoort`
WHERE `idKlant` = 5 AND
GROUP BY `Uren`.`idProject`;
就我个人而言,我发现left outer join
更容易遵循(“保留第一个表中的所有行”与“保留最后一个表中的所有行”),但同样的原则适用:where
条件可以将外连接转变为内连接,因为外连接会生成意外的 NULL
值。
您可能还需要移动 idklant
到on
条款。我质疑你为什么按 uren.idProject
进行聚合,其中可能有 NULL
值。
关于mysql - 结果sql为空时返回0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23241549/