代码之家  ›  专栏  ›  技术社区  ›  renevdkooi

sql查询返回0而不是空值

  •  1
  • renevdkooi  · 技术社区  · 14 年前

    我有下面的语句,它工作得很好,除了如果第二个表没有对第一个表的引用项,那么它将不返回任何结果。

    我需要的是它回来 count(p.match_id) AS matchcount 作为0

    "SELECT c.*, count(p.match_id) AS matchcount 
        FROM ci_address_book c LEFT JOIN ci_matched_sanctions p
        ON c.id = p.addressbook_id 
        GROUP BY p.addressbook_id ORDER BY c.id LIMIT ".$offset.",".$num;
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Gates VP    14 年前

    这里的第一个问题是 LEFT JOIN . 这意味着所有行 c 将返回,即使它们与中的行不匹配 p .

    你的问题。

    如果第二个表没有对第一个表的引用项,它将不返回任何结果

    让我用自己的话重新表述一下。

    如果 第页 表没有指向 c类 表不会返回任何结果

    当您执行左联接时,“右”表中的任何空值都将返回空值。所以matchcount在这些情况下是“空”的。(你可以通过 select c.*, p.* ... where p.addressbook_id = NULL )

    要改为显示“0”,请执行以下操作:

    SELECT c.*, COALESCE(COUNT(p.match_id), 0) AS matchcount

    COALESCE 返回第一个非空值。所以当COUNT(p.match_id)为空时,得到0。