php - mysql group by column 指定别名时出错

标签 php mysql

以下 mysql 查询给出错误:'email.id' isn't in GROUP BY, 1055

SELECT contact_a.id as contact_id,
  contact_a.sort_name  as `sort_name`,
  contact_a.display_name  as `display_name`,
  phone.id as phone_id,
  phone.phone_type_id as phone_type_id,
  phone.phone as `phone`,
  email.id as `email_id`,
  email.email as `email`,

FROM contact_table contact_a
  LEFT JOIN email ON (contact_a.id = email.contact_id)
  LEFT JOIN phone ON (contact_a.id = phone.contact_id)

 GROUP BY contact_a.id,
  `sort_name`,
  `display_name`,
  `phone_id`,
  `phone_type_id`,
  `phone`,
  `email_id`,
  `email`";

尽管我在 GROUP BY 中指定了 email.id 的别名。

如果我将 GROUP BY 中的别名 email_id 替换为 email.id,就可以了。

但为什么我不能在 GROUP BY 中使用别名以及它如何适用于其他别名,如 phone_idphone_type_idemail等等?

最佳答案

由于 mysql 扩展了 mysql 标准并允许您在 group by 子句中使用列别名,您唯一需要注意的是不要在任何引用的表中使用与现有字段名称相同的别名from 子句。

如果您使用与现有字段相同的别名,则 mysql 会将 group by 子句解释为好像它引用了现有字段,而不是别名字段。这会导致上述错误消息。

关于php - mysql group by column 指定别名时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37250437/

相关文章:

php - 根据使用情况查询不同费率类别的总金额

php - 分配对象和分配对象引用有什么区别?

php - 表的 SQL 重新排序索引

php - Laravel 5.1 auth attempt with extra parameters using default auth controller and middleware

php - libdb4.6-dev 与 libdb4.7-dev

mysql - 如何提高 mysql 连接查询速度?

Java 10 中的 java.lang.ClassNotFoundException : com. mysql.jdbc.Driver 错误

mysql - rails mysql适配器错误

mysql - 我想防止删除与不同实体关联的实体

php+socket.io+mysql - 像聊天一样的 Messenger