【发布时间】:2019-06-08 11:52:30
【问题描述】:
我有三个产品表,产品配置(例如 iPhone x 64 黑色,iPhone x 64 红色)和产品库存;我想选择所有产品并按价格(在配置表中)和可用性(在库存表中)排序,但每个产品只有一行;我怎么能这样做? 下面是我的mysql表结构
CREATE TABLE `product_inventories` (
`inventory_id` bigint(20) NOT NULL,
`quantity` int(11) NOT NULL,
`warehouse_id` bigint(20) DEFAULT NULL,
`config_id` bigint(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `product_configs` (
`config_id` bigint(20) NOT NULL,
`product_id` bigint(20) DEFAULT NULL,
`price` decimal(12,3) DEFAULT NULL,
`discount_percent` int(11) DEFAULT NULL,
`sku` varchar(30) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;
CREATE TABLE `products` (
`id` bigint(20) NOT NULL,
`title` varchar(255) DEFAULT NULL,
`category_id` bigint(20) NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
我试过这个查询:
SELECT *
FROM products
LEFT JOIN product_configs ON products.id = product_configs.product_id
LEFT JOIN product_inventories inventories ON inventories.inventory_id =
(SELECT product_inventories.inventory_id from product_inventories
WHERE product_inventories.config_id = product_configs.config_id
ORDER by product_inventories.quantity DESC LIMIT 1 )
ORDER BY product_configs.price ASC, inventories.quantity DESC
编辑: 使用此查询:
SELECT *
FROM products
LEFT JOIN product_configs ON products.id = product_configs.product_id
LEFT JOIN product_inventories inventories ON inventories.inventory_id =
(SELECT product_inventories.inventory_id from product_inventories
WHERE product_inventories.config_idd = product_configs.config_id
ORDER by product_inventories.quantity DESC LIMIT 1 )
ORDER BY product_configs.price is null, product_configs.price ASC, inventories.quantity DESC
【问题讨论】:
-
how can id do this?... 通过编写 SQL 查询。 Stack Overflow 不是免费的代码编写/家庭作业服务。如果您在这里需要帮助,您将不得不付出一些努力。 -
请添加您的查询
-
@JoeTaras 查询已添加;
-
在您的查询中有一个错误:“WHERE ORDER BY”您忘记了 where 子句吗? (虽然与问题无关)
-
@JulienB。已编辑;
标签: mysql sql join spring-data-jpa