-2

如果这看起来很简单,我提前道歉,因为我的作业需要在 2 小时内通过,而且我没有足够的时间做进一步的研究,因为我今晚有另一个待提交的作业。我只知道基本的 MYSQL 命令,不知道这些类型。这是最后没有回答的问题之一,即使我已经阅读了 JOIN 文档,也让我发疯了。请帮忙。

假设我有 4 张桌子

 _______________     _______________      _______________    _______________
|   customers   |   |     orders    |    | ordered_items |  |   products    |
|_______________|   |_______________|    |_______________|  |_______________|
|(pk)customer_id|   | (pk)order_id  |    |   (pk)id      |  |(pk)product_id |
|  first_name   |   |(fk)customer_id|    | (fk)order_id  |  |     name      |
|  last_name    |   |     date      |    |(fk)product_id |  |  description  |
|   contact_no  |   |               |    |    quantity   |  |     price     |
|_______________|   |_______________|    |_______________|  |_______________|      

我如何能够查询所有订购的产品(例如:customer_id = '5')

我只知道基本的 SQL,比如对 1 个表的直接查询和来自 2 个不同的连接,但是由于它的 4 个不同的表彼此之间有不同的关系,我如何才能获得按特定客户 ID 订购的所有产品?

因为它就像从 order_id = (* orders by customer_id = 5) 的订购产品中获取所有产品。

但是,在进行此类查询时,什么是优化和最佳实践方式?

4

2 回答 2

1

您只需要加入 3 个表 - ordersorder_itemsproducts

SELECT DISTINCT products.*
FROM products
JOIN order_items USING (product_id)
JOIN orders USING (order_id)
WHERE orders.customer_id = 35

正如许多人所提到的,通过了解表JOINS,您会帮自己一个大忙。加入 2 个表与加入 4 个或更多表之间的语法没有太大区别。

SQLFiddle是一个强烈推荐用于练习和共享查询的资源。

于 2013-06-20T20:51:44.903 回答
1

这是一条评论,因为您似乎是 SQL 新手。您需要学习查询的基本语法(这就是您被否决的原因)。

但你也问形式。数据结构实际上布局得很好。我确实有两条评论。首先,您应该对如何命名 id 列保持一致。对于Ordered_Items, id 应该是ordered_item_id

其次,应避免在列名和表名中使用 SQL 特殊词。而不是date,使用OrderDate.

于 2013-06-20T20:53:12.857 回答