代码之家  ›  专栏  ›  技术社区  ›  Jack marksy

如何向该MySQL查询添加左联接?

  •  0
  • Jack marksy  · 技术社区  · 15 年前

    我是一个初学者,所以请原谅我,如果这对你们中的一些人来说有点容易。

    所以,我这里有个问题:

    SELECT code.id AS codeid, code.title AS codetitle, code.summary AS codesummary, code.author AS codeauthor, code.rating AS rating, code.date,
                        code_tags.*, 
                        tags.*, 
                        users.firstname AS authorname, 
                        users.id AS authorid,
                        GROUP_CONCAT(tags.tag SEPARATOR ', ') AS taggroup
                        FROM code, code_tags, tags, users
                        WHERE users.id = code.author AND code_tags.code_id = code.id AND tags.id = code_tags.tag_id
                        GROUP BY code_id
                        ORDER BY date DESC
    

    相当激烈。我想计算评论的数量 code 已从表注释中提交。我不能将其添加为 WHERE comments.codeid = code.id 因为这样就不会从没有注释的数据库中选择提交。

    我怎样才能加上 LEFT JOIN comments.codeid ON code.id = comments.codeid 还是沿着这些线?

    谢谢!

    杰克

    2 回复  |  直到 15 年前
        1
  •  1
  •   Donnie    15 年前

    将现有联接更改为正确的SQL-92 JOINS ,并添加 left join S变得微不足道。

    SELECT 
      code.id AS codeid, code.title AS codetitle, code.summary AS codesummary, code.author AS codeauthor, code.rating AS rating, code.date,
      code_tags.*, 
      tags.*, 
      users.firstname AS authorname, 
      users.id AS authorid,
      GROUP_CONCAT(tags.tag SEPARATOR ', ') AS taggroup
    FROM 
      code
      join code_tags on code_tags.code_id = code.id
      join tags on tags.id = code_tags.tag_id
      join users on users.id = code.author
      left join comments on comments.codeid = code.id
    GROUP BY code_id
    ORDER BY date DESC
    

    注意,作为一般经验法则,选择 * 在查询中被认为是一个坏主意。只检索您实际需要的列。

        2
  •  0
  •   iniju    15 年前

    使用count(comments.code_id)和left join获取注释数。 要使其生效,您需要按除comments.code_id之外的所有返回列进行分组。 某些数据库(如MS Access)无法对用*选择的字段进行分组,因此必须按名称选择它们,然后将它们包括在分组依据中。

    如表 代码标签 有字段 科迪亚德 塔吉德 标签 有字段 身份证件 标签 然后看起来应该是:

    SELECT code.id AS codeid, code.title AS codetitle,  
    code.summary AS codesummary, code.author AS codeauthor,  
    code.rating AS rating, code.date,  
    code_tags.code_id, code_tags.tag_id, tags.id, tags.tag,  
    users.firstname AS authorname, users.id AS authorid,  
    GROUP_CONCAT(tags.tag SEPARATOR ', ') AS taggroup  
    count(comments.code_id) as NumComments  
    FROM  
    code JOIN code_tags ON code_tags.code_id = code.id  
    JOIN tags ON tags.id = code_tags.tag_id  
    JOIN users ON users.id = code.author  
    LEFT JOIN comments ON comments.code_id = code.id  
    GROUP BY code_id, codetitle, codesummary, codeauthor, rating, code.date,  
    code_tags.code_id, code_tags.tag_id, tags.id, tags.tagName,
    authorname, authorid, taggroup
    ORDER BY date DESC