[英]MYSQL limit the JOIN rows
我在查询中涉及4个表:
主表items
持有项目列表suppliers
持有该项目的供应商通过INNER JOIN ID item_categories
持有项目类别由INNER JOIN ID
以及在以下结构中保存订单的orders
表: id
。 。 。 items
=>一个JSON,用于按顺序保存items数组
项目JSON的示例:
{
"10": {
"name": "item 1",
"step": "1",
"price": "140",
"amount": "4"
},
"24": {
"name": "item 2",
"step": "1",
"price": "6.2",
"amount": "1"
},
"35": {
"name": "item 3",
"step": "1",
"price": "2.9",
"amount": "3"
},
"37": {
"name": "item 4",
"step": "1",
"price": "3.9",
"amount": "2"
}}
我想获取最近4个订单金额中所有商品的表格
我管理这个查询:
SELECT
`items`.`id`,
`items`.`part_number`,
`item_categories`.`name` AS category,
`suppliers`.`name` AS supplier,
`items`.`supplier_id`,
`items`.`name`,
`items`.`inventory`,
`items`.`package_items`,
`items`.`order_step`,
`items`.`price`,
`items`.`discount`,
`items`.`scale`,
`items`.`by_scale`,
`items`.`has_tax`,
`items`.`category_id`,
`items`.`enable`,
Group_concat(Json_extract(`orders`.`items`, Concat('$."', `items`.`id`, '".amount')) ORDER BY
`orders`.`createdate` DESC) AS last_orders_amount
FROM `items`
INNER JOIN `suppliers`
ON `items`.`supplier_id` = `suppliers`.`id`
INNER JOIN `item_categories`
ON `items`.`category_id` = `item_categories`.`id`
LEFT JOIN `orders`
ON
Json_extract(`orders`.`items`, Concat('$."', `items`.`id`, '"')) IS
NOT NULL
WHERE 1
GROUP BY `items`.`id`
这给了我所有最后订单的所有物品
所以我的最后一个问题是,有没有办法限制通过LEFT JOIN获得的结果?
谢谢 :)
一种简单的方法(但可能不理想)是:
LEFT JOIN (SELECT * FROM `orders` LIMIT 1000) ordrs
ON
Json_extract(`ordrs`.`items`, Concat('$."', `items`.`id`, '"')) IS
NOT NULL
WHERE 1
GROUP BY `items`.`id`
因此,基本上只嵌套一个select语句作为您的联接表。 如果我认为有更好的方法,将进行编辑。
编辑:
如果您有权获得排名,那么看起来也可以使用。 资源:
如果您可以使用排名,那可能是更好的选择
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.