【问题标题】:How to join three mysql tables and select rows for given attribute (customerNumber)如何连接三个mysql表并为给定属性选择行(customerNumber)
【发布时间】:2019-06-06 14:23:45
【问题描述】:

我正在尝试编写一个 MySQL 查询来实现以下目标:

根据所选的 customerNumber,它应该显示所有 客户订购的产品以及所有产品详细信息和订单详细信息,按订单日期按时间顺序排列。

ERD 如下所示:

对于每个选定的客户编号,我只需要来自订单、订单详细信息和产品表的数据。

【问题讨论】:

  • 你尝试了什么?

标签: mysql sql join mysql-workbench


【解决方案1】:

您可以尝试这个并更改您需要的内容以使其正常工作。

所以每个* 必须替换为您要显示的表格的列的列表:

SELECT 
    C.customerNumber ,  -- the customer id
    O.*,                -- replace by O.column_name1, O.column_name2, ...
    OD.*,               -- replace by OD.column_name1, OD.column_name2, ...
    P.*                 -- replace by P.column_name1, P.column_name2, ...
FROM customers as C
-- If you only want customer with at least ONE orders, change LEFT JOIN by INNER JOIN
LEFT JOIN orders as O on O.customerNumber = C.customerNumber
-- I suppose orderLineNumber is the same than orderNumber in table orders?
LEFT JOIN orderdetails as OD on OD.orderLineNumber = O.orderNumber 
LEFT JOIN products as P on P.productCode = OD.productCode
-- The result will be order by customerNumber, of for each customerNumber by orderDate
ORDER BY C.customerNumber, O.orderDate

这是你要找的吗?

【讨论】:

  • 感谢您帮助我前进。最后,我使用了这样的东西: SELECT * FROM orders CROSS JOIN orderdetails CROSS JOIN products WHERE customerNumber and orders.orderNumber = orderdetails.orderNumber and orderdetails.productCode = products.productCode ORDER BY orders.orderDate;
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2014-02-24
相关资源
最近更新 更多