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我怎样才能做得正确呢?老实说,在没有看到表结构和一些样本数据的情况下,如果我提出一些建议,我充其量只是在猜测。嗯,我正在发布表结构和样本数据