【问题标题】:Why am I getting an error while using group by with a left join?为什么在将 group by 与左连接一起使用时出现错误?
【发布时间】:2014-09-20 01:45:10
【问题描述】:

我正在尝试为我的管理面板开发一项功能,该功能可以根据他们可能拥有的任何“标志”获取 cmets。我想从 cmets 表中获取结果,但只有在 flags 表中具有关联行的 cmets。然后,我想按 cmets 拥有的标志总数对结果进行排序。

这些是我的表结构:

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

有人有什么想法吗?

【问题讨论】:

  • 别名 -- 改用group by c.comment_id...

标签: mysql join group-by


【解决方案1】:

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

GROUP BY comment_id

进入

GROUP BY c.comment_id

【讨论】:

  • 考虑到 OP 正在选择 c.comment_id,我想这将是正确的分组。
【解决方案2】:

组语句中的“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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2011-02-07
    • 2019-01-15
    • 1970-01-01
    • 2011-11-13
    • 2019-06-26
    • 2022-06-17
    相关资源
    最近更新 更多