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