【发布时间】:2017-11-03 19:16:26
【问题描述】:
我有 4 个表参与查询:
主表items 保存项目列表
suppliers 通过 id 保存项目供应商 INNER JOIN
item_categories 按 id 保存项目类别 INNER JOIN
和orders 表在以下结构中保存订单:
id
.
.
.
items => 按顺序保存 items 数组的 JSON
项目 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 获得的结果?
谢谢:)
【问题讨论】: