Mysql 购物车-左加入-希望限制为最接近购买日期的一行项目
我试图向客户展示以前购买的所有商品 我有三张桌子:Mysql 购物车-左加入-希望限制为最接近购买日期的一行项目,mysql,sql,Mysql,Sql,我试图向客户展示以前购买的所有商品 我有三张桌子: shopping_cart shopping_orders audit_shopping_items 我想选择最接近apple purchase date order date-from-audit\u shopping\u items表的苹果价格 问题:问题是当我做一个左连接时,我得到两行相同的订单ID中的苹果,代码如下 我只想要一个,最接近产品购买日期的 表:审核购物项目 +-----+------------+-------------
shopping_cart
shopping_orders
audit_shopping_items
我想选择最接近apple purchase date order date-from-audit\u shopping\u items表的苹果价格
问题:问题是当我做一个左连接时,我得到两行相同的订单ID中的苹果,代码如下
我只想要一个,最接近产品购买日期的
表:审核购物项目
+-----+------------+--------------+--------------+-------------------+----------------+---------------------+--------------+
| id | item_code | item_name | item_weight | item_weight_unit | item_quantity | item_selling_price | item_status |
+-----+------------+--------------+--------------+-------------------+----------------+---------------------+--------------+
| 1 | 200000001 | apple | 500 | gm | 1 | 10 | active |
| 2 | 200000002 | apple_green | 500 | gm | 1 | 10 | active |
| 3 | 200000003 | avocado | 500 | gm | 1 | 10 | active |
| 4 | 200000001 | apple | 500 | gm | 1 | 18 | active |
+-----+------------+--------------+--------------+-------------------+----------------+---------------------+--------------+
我的Mysql查询
SELECT
sc.item_code,
so.order_id,
si.item_name,
si.item_selling_price,
FROM
shopping_cart as sc
LEFT JOIN shopping_orders AS so ON sc.order_id = so.order_id
LEFT JOIN audit_shopping_items AS si ON si.item_code (
SELECT
pi.item_code
FROM
shopping_cart AS pi
WHERE
pi.sys_m_date <= so.sys_m_date
AND pi.item_code = sc.item_code
LIMIT
1
)
LIMIT
500
表:购物订单
+-----+----------------------+----------------------+-------------+---------------+------------------+----------------+--------------+
| id | sys_c_date | sys_m_date | order_id | order_amount | order_owner | order_status | order_method |
+-----+----------------------+----------------------+-------------+---------------+------------------+----------------+--------------+
| 1 | 2019-12-09 22:05:15 | 2019-12-09 22:05:15 | 1869460212 | 40 | abc@example.com | created | cod |
| 2 | 2019-12-09 22:06:24 | 2019-12-09 22:06:24 | 2891252193 | 92 | abc@example.com | created | cod |
+-----+----------------------+----------------------+-------------+---------------+------------------+----------------+--------------+
左键将audit_shopping_items作为si ON-si.id-而不是-si.item_code-加入到pi id解决了问题
SELECT
sc.item_code,
so.order_id,
si.item_name,
si.item_selling_price,
FROM
shopping_cart as sc
LEFT JOIN shopping_orders AS so ON sc.order_id = so.order_id
LEFT JOIN audit_shopping_items AS si ON si.id (
SELECT
pi.id
FROM
shopping_cart AS pi
WHERE
pi.sys_m_date <= so.sys_m_date
AND pi.item_code = sc.item_code
LIMIT
1
)
LIMIT
500
为什么要对audit\u shopping\u items表进行外部联接?如果没有购买的定价信息,这意味着什么?这样的事情真的可能吗?同样,为什么要与shopping_orders表进行外部联接?如果你错过了一个购物订单,例如,pi.sys\u m\u date,这里似乎有很多与问题无关的东西。看:@草莓,我已经编辑好了信息,有机会的话请看一看
SELECT
sc.item_code,
so.order_id,
si.item_name,
si.item_selling_price,
FROM
shopping_cart as sc
LEFT JOIN shopping_orders AS so ON sc.order_id = so.order_id
LEFT JOIN audit_shopping_items AS si ON si.id (
SELECT
pi.id
FROM
shopping_cart AS pi
WHERE
pi.sys_m_date <= so.sys_m_date
AND pi.item_code = sc.item_code
LIMIT
1
)
LIMIT
500