【问题标题】:Can't GROUP BY with first unique item in MYSQL不能 GROUP BY 与 MYSQL 中的第一个唯一项目
【发布时间】:2018-04-15 21:48:20
【问题描述】:

我有两个 MySQL 表: 产品

照片

然后我做 INNER JOIN

SELECT * 
FROM product 
INNER JOIN photo 
    ON product.productID = photo.productID

但我只需要每个唯一产品 ID 一个 raw

如果我尝试:

SELECT * 
FROM product 
INNER JOIN photo 
    ON product.productID = photo.productID 
ORDER BY product.productID

返回错误

SELECT 列表的表达式 #38 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“photo.photoID”;这与 sql_mode=only_full_group_by 不兼容

问题是 photoID 列。每个产品的照片很少,但我需要每个产品只有第一张照片的表格。

我可以用 WHERE 之类的 MYSQL 工具来做吗?

谢谢!

【问题讨论】:

  • 如果我尝试使用 GROUP BY,它会出错.. MySQL 并没有犯错.. 您使用 GROUP BY 的方式无效.. 此外 MySQL 还保护您免受无效结果的影响。
  • 您有产品照片 - 但您想要第一次会议
  • 请定义“第一次会议”。 SQL 表代表 无序 集。表或行子集中没有“第一”行。您需要一个指定顺序的列。
  • 您使用的查询是什么?看来您只需要在 SELECT 子句中使用 MIN(photoID)

标签: mysql sql


【解决方案1】:

当你使用聚合函数子句时,你需要在非聚合列上使用GROUP BY

进行子查询以查找 MIN photoID。然后 JOIN 在另一个子查询中

你可以试试这个。

SELECT p.*,T.* FROM 
(
 SELECT productID,MIN(photoID) 'photoID'
 FROM photo
 GROUP BY productID
) T 
INNER JOIN (
 SELECT DISTINCT productID,name
 FROM product
) p ON p.productID = T.productID 

sqlfiddle:http://sqlfiddle.com/#!9/97a87d/12

【讨论】:

  • 完美!谢谢!
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多