左联接、ISNULL、IFNULL 不起作用


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。

怎么了?

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

您的WHERE条件应用于联接的结果,而不是具体应用于tblcount行。当两个表之间不匹配时,联接在所有tblcount列中返回NULL。因此,NULL = 'whatever'不会计算为true,并且不会返回该行。

按照@cjk的建议,将OR tblcount.SID IS NULL添加到WHERE中,或者将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"; 

其他5行的tblcount中没有SID的数据

最新更新