【问题标题】:MySQL Join or SubqueryMySQL 连接或子查询
【发布时间】:2021-02-10 05:15:37
【问题描述】:

我需要对所有产品的最后购买日期进行 mysql 查询。对于连接和子查询,我的大脑一片空白。

3 个表格 - 产品(需要所有记录)、订单(带有日期的订单标题信息)和 order_products,其中包含订单标题的产品详细信息行。

orders_products 具有到 products 表的关键 products_id 链接 orders_products 具有链接到订单表的关键 order_id

数据类似

products
product_id 
----------
apples 
bananas
pears 

orders
orders_id date_purchased
------------------------------
 1         2018-06-24 12:37:42
 2         2020-10-27 10:30:00
 3         2019-08-25 16:43:36

orders_products
orders_id products_id
---------------------
1           apples
1           pears
2           bananas
2           pears
2           apples
3           bananas
3           apples

伪查询看起来像 对于每个产品 查找最后一个订单,其中 order.products.products_id = products.products_id by order.date_purchased desc limit 1

需要的结果 产品编号 | Date_last_purchased

【问题讨论】:

标签: mysql join


【解决方案1】:

尝试下一个查询:

SELECT 
    p.products_id,
    coalesce(MAX(date_purchased), 'never purchased') last_purchased
FROM products p
LEFT JOIN orders_products op on p.products_id = op.products_id
LEFT JOIN orders o ON o.orders_id = op.orders_id
GROUP BY products_id;

SQLize.online上测试查询

【讨论】:

  • 这也很接近,但我得到了所有的 orders_products 行。我需要 products 表来驱动查询,根据 orders_products 表中的产品 id 从 orders 表中查找最近购买的日期。
【解决方案2】:

据我了解,这就是您所需要的。

SELECT p.product_id, o.date_purchased
FROM products p 
LEFT JOIN orders_products op ON op.products_id = p.product_id 
LEFT JOIN orders o ON o.orders_id = op.orders_id
GROUP BY op.products_id
ORDER BY o.date_purchased DESC

【讨论】:

  • 这很接近,但我得到了一个购买日期,而不是最近的 - 是否需要 limit 或 max 才能找到最近的 date_purchased。
猜你喜欢
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-02
  • 2010-11-06
  • 1970-01-01
相关资源
最近更新 更多