mysql-如何从SQL中的相关表中获得单个结果?
作者:互联网
我有以下SQL查询:
SELECT
gallery.id,
gallery.thumbnail_big,
products.id,
products.title,
products.size,
products.price,
products.text_description,
products.main_description
FROM
gallery,
products
WHERE gallery.id=products.id
它从2个表(“产品”和“图库”)中获取数据.表“图库”包含产品的图像.每个图像的ID均与产品ID相同.每个产品都有多个图像,因此,如果像上面指定的查询一样获取数据,则将获得每个产品的所有图像.我需要得到1张图片.每个产品1张图片.我知道我可以使用DISTINCT关键字来做到这一点.但是我不知道应该如何与我有查询一起使用.
解决方法:
由于您使用的是MySQL,因此我将为您提供一个非常简单的特定于MySQL的解决方案:
SELECT
gallery.id,
gallery.thumbnail_big,
products.id,
products.title,
products.size,
products.price,
products.text_description,
products.main_description
FROM gallery
INNER JOIN products
ON gallery.id=products.id
GROUP BY products.id
当然,这将返回任意的gallery.id和thumbnail_big,但您尚未指定所需的那个.实际上,它将是第一个物理存储在表中的对象,但是您对此几乎没有控制权.
上面的查询是模棱两可的,因此ANSI SQL和大多数RDBMS品牌都不允许使用.但是MySQL允许这样做(SQLite也这样做).
更好的解决方案是使查询不模糊.例如,如果您要获取具有最高主键值的图库图像:
SELECT
g1.id,
g1.thumbnail_big,
p.id,
p.title,
p.size,
p.price,
p.text_description,
p.main_description
FROM products p
INNER JOIN gallery g1 ON p.id = g1.id
LEFT OUTER JOIN gallery g2 ON p.id = g2.id AND g1.pkey < g2.pkey
WHERE g2.id IS NULL
我必须假定您还有另一个自动递增的gallery.pkey列,否则可以用来唯一区分给定产品的图库图像.如果没有这样的列,则需要创建一个.
然后查询尝试查找同一产品的行g2,该行大于g1.如果不存在这样的行,则g1必须是最大的行.
标签:distinct,greatest-n-per-group,sql,mysql 来源: https://codeday.me/bug/20191208/2088066.html