为什么在使用group by with left join时出现错误?

时间:2014-09-20 01:45:11

标签: mysql join group-by

我正在尝试为我的管理面板开发一个功能,根据任何"标记"他们可能有。我想从comments表中获取结果,但只需要在flags表中有相关​​行的注释。然后,我想按注释所包含的标志总数来排序结果。

这些是我的表结构:

CREATE TABLE IF NOT EXISTS `article_comments` (
  `comment_id` int(15) NOT NULL AUTO_INCREMENT,
  `author_id` int(15) NOT NULL,
  `article_id` int(15) NOT NULL,
  `modifier_id` int(15) NOT NULL,
  `content` varchar(255) NOT NULL,
  `date_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `date_modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

CREATE TABLE IF NOT EXISTS `article_comment_flags` (
  `flag_id` int(15) NOT NULL AUTO_INCREMENT,
  `comment_id` int(15) NOT NULL,
  `member_id` int(15) NOT NULL,
  `date_flagged` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`flag_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

这是我正在使用的当前查询:

    SELECT
        c.comment_id AS comment_id, c.article_id,
        f.flag_id, f.comment_id, f.member_id, f.date_flagged, COUNT(f.flag_id) AS total_flags
    FROM article_comments AS c
    LEFT JOIN article_comment_flags AS f ON (c.comment_id = f.comment_id)
    GROUP BY comment_id
    ORDER BY total_flags DESC
    LIMIT 5

这是我得到的当前SQL错误:

Column 'comment_id' in group statement is ambiguous

有人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您必须指出哪个comment_id将被分组。所以你必须换行:

GROUP BY comment_id

GROUP BY c.comment_id

答案 1 :(得分:0)

专栏' comment_id'在群组声明中含糊不清:

SELECT
c.comment_id AS comment_id,
f.comment_id
FROM article_comments AS c
LEFT JOIN article_comment_flags AS f ON (c.comment_id = f.comment_id)
GROUP BY comment_id
  • 它们是相同的,所以你只需要其中一个,从左侧拿一个,因为它总是在那里,所以从选择部分删除f.comment_id。
  • 您可以编写USING(comment_id)而不是ON(..),然后您只能获得此列一次。
  • 明确告诉我们,哪一列到GROUP BY,最好从左侧使用c.comment_id