Mysql 在联接中选择最小值的更好方法是什么?

Mysql 在联接中选择最小值的更好方法是什么?,mysql,join,query-performance,Mysql,Join,Query Performance,我有三个表,我想从一个联接表中根据日期选择最旧的介质。查询工作正常,但我想知道它的性能解决方案是否正确,或者是否有更好的方法 SELECT product.`product_id`, product.`title`, product.`price`, media_gallery.`thumbnail`, product.`special_price` FROM product LEFT JOIN (SELECT product_media.`product_id`, product_me

我有三个表,我想从一个联接表中根据日期选择最旧的介质。查询工作正常,但我想知道它的性能解决方案是否正确,或者是否有更好的方法

SELECT product.`product_id`, product.`title`, product.`price`, 
media_gallery.`thumbnail`, product.`special_price` 
FROM product 
LEFT JOIN 
(SELECT product_media.`product_id`, product_media.`media_id` 
FROM product_media ORDER BY product_media.`added_on` ASC LIMIT 1) product_media 
ON product.`product_id` = product_media.`product_id` 
LEFT JOIN media_gallery ON product_media.`media_id` = media_gallery.`media_id` 
GROUP BY product.`product_id` 
LIMIT 10
我有三个表,我想从中选择具有单个图像的产品,并且图像应该是最旧的。图像存储在media_gallery中,图像分配在product_media中。产品可以有多个在产品媒体中引用的图像。我要选择产品标识、产品标题、产品价格、产品特殊价格、媒体库缩略图。缩略图应该是最早添加的图像

CREATE TABLE `product_media` (
  `id` varchar(60) NOT NULL,
  `product_id` varchar(50) NOT NULL,
  `media_id` varchar(50) NOT NULL,
  `added_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `product_id_2` (`product_id`,`media_id`),
  KEY `product_id` (`product_id`),
  KEY `media_id` (`media_id`),
  CONSTRAINT `product_media_ibfk_1` FOREIGN KEY (`product_id`) REFERENCES `product` (`product_id`) ON DELETE CASCADE ON UPDATE NO ACTION,
  CONSTRAINT `product_media_ibfk_2` FOREIGN KEY (`media_id`) REFERENCES `media_gallery` (`media_id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8


CREATE TABLE `media_gallery` (
  `media_id` varchar(50) NOT NULL,
  `media_type` varchar(10) NOT NULL,
  `media_title` varchar(100) DEFAULT NULL,
  `media_url` varchar(255) NOT NULL,
  `thumbnail` varchar(255) NOT NULL,
  `added_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`media_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8


CREATE TABLE `product` (
  `product_id` varchar(50) NOT NULL,
 `title` varchar(255) NOT NULL,
  `description` varchar(2000) DEFAULT NULL,
  `price` decimal(10,2) NOT NULL,
  `special_price` decimal(10,2) DEFAULT NULL,
  `status` varchar(15) DEFAULT 'AVAILABLE',
  `weight` double DEFAULT NULL,
 `unit_id` varchar(50) DEFAULT NULL,
  `added_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`product_id`),
  UNIQUE KEY `sku` (`sku`),
  KEY `unit_id` (`unit_id`),
  CONSTRAINT `product_ibfk_1` FOREIGN KEY (`unit_id`) REFERENCES `units` (`unit_id`) ON DELETE SET NULL ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8

您的
SELECT
子句无效,因为它包含非聚合列。在SQL中不推荐使用group by WITH AGGRATION函数,更新的mysql版本不允许使用group by WITH AGGRATION函数。。您没有选择最小值(您没有最小值(列名称)函数..您正在选择前10个订单行..这不是same@TimBiegeleisen我怎样才能做得正确呢?老实说,在没有看到表结构和一些样本数据的情况下,如果我提出一些建议,我充其量只是在猜测。嗯,我正在发布表结构和样本数据