【问题标题】:Multiple mysql joins多个mysql连接
【发布时间】:2011-09-05 12:52:31
【问题描述】:

我需要从三个表中获取信息,其中一个表包含信息,另外两个包含我需要计算的信息。

所以第一个表结构是:

tbl_img img_id img_name tbl_cmets comment_id img_id 评论 tbl_vote vote_id logo_id

我希望结果中包含与每个徽标相关的 cmets 和投票数。

我有一些关于 cmets 计数的查询,但不知道第二个连接的语法。

SELECT l.img_id, l.img_name, COUNT(c.comment_id) AS comment_count
FROM tbl_images as l
LEFT OUTER JOIN tbl_comments AS c USING (img_id);

谁能帮忙?

【问题讨论】:

    标签: mysql sql join


    【解决方案1】:

    这个怎么样:

    SELECT l.img_id, l.img_name, 
     (SELECT COUNT(*) FROM tbl_comments c WHERE i.img_id = c.img_id ) AS comment_count,
     (SELECT COUNT(*) FROM tbl_vote v WHERE i.img_id = v.img_id ) AS vote_count
    FROM tbl_images i 
    

    【讨论】:

    • 你怎么不用join?
    • 解决方案是使用子查询并将外部图像表 i.img_id 值传递给子查询。只有当子查询返回单个结果时,我们才能这样做
    • 这两个子查询会返回什么类型的值?列名?
    • 均为数字,名称为 AS 后面的位。评论计数和投票计数。
    【解决方案2】:

    听起来您需要两个查询:一个用于计算选票,一个用于计算 cmets。

    据我所知,COUNT 计算结果行,连接创建结果行以显示连接表的所有允许排列。

    假设您有 I 个条目,每个条目都有 J cmets 和 K 票,您将在连接后收到每个条目的 J*K 行,并且 COUNTs 都会返回该 J*K 而不是正确的数量。

    我不记得你是否可以在 MySQL 中进行内部查询,但那将是可行的方法。 (见@Kevin Burtons 的回答)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-31
      • 2011-11-25
      • 2015-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-18
      相关资源
      最近更新 更多