左连接,ISNULL,IFNULL不起作用

时间:2013-02-26 09:52:44

标签: sql left-join isnull

CREATE TABLE IF NOT EXISTS `tblflash` (
  `FID` int(11) NOT NULL AUTO_INCREMENT,
  `fname` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`FID`)
) 

CREATE TABLE IF NOT EXISTS `tblcount` (
  `ID` int(50) NOT NULL AUTO_INCREMENT,
  `SID` int(50) NOT NULL,
  `FID` int(11) NOT NULL,
  `sDateTime` datetime NOT NULL,
  `elaspedTime` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
)


$sqldate1 =
    "SELECT distinct tblflash.FID, tblflash.fname, IFNULL(sum(tblcount.elaspedTime),0)
    FROM tblflash 
    left outer JOIN tblcount 
    ON tblflash.FID = tblcount.FID 
    WHERE tblcount.SID='".$_SESSION['SID']."'
    ORDER BY tblflash.FID"; 

让我们说tblflash中有10行在tblcount中有10行和5行。 显示的记录仅显示5行。我想显示所有fname没有重复,如果null设置为0.

怎么了?

3 个答案:

答案 0 :(得分:1)

您的WHERE tblcount.SID='".$_SESSION['SID']."'正在使查询充当INNER JOIN - 您需要添加or tblcount.SID IS NULL

答案 1 :(得分:1)

您的WHERE条件适用于加入结果,专门适用于tblcount行。当两个表之间没有匹配时,连接将在所有tblcount列中返回NULL。因此,NULL = 'whatever' 不会评估为true,并且不会返回该行。

OR tblcount.SID IS NULL添加到WHERE作为@cjk has suggested或将WHERE条件作为ON子句的一部分,如下所示:

$sqldate1 =
    "SELECT distinct tblflash.FID, tblflash.fname, IFNULL(sum(tblcount.elaspedTime),0)
    FROM tblflash 
    left outer JOIN tblcount 
    ON tblflash.FID = tblcount.FID 
    AND tblcount.SID='".$_SESSION['SID']."'
    ORDER BY tblflash.FID"; 

答案 2 :(得分:0)

其他5行<{1}}中的SID没有数据