【问题标题】:Multiple joins in MySQL tableMySQL表中的多个连接
【发布时间】:2016-09-01 16:12:28
【问题描述】:

如果我有一张表引用赞助商的名称和他们推荐的产品的产品 ID,如下所示:

--------------------------------
|Name |Product ID 1|Product ID 2|
--------------------------------
|Jon  |     1      |      3     |
|Sally|     1      |      2     |
--------------------------------

还有一张列出产品的表格:

----------------------------------------
|Product ID |Product Name|Product Price|
----------------------------------------
|     1     |  Prod 1    |    25       |
|     2     |  Prod 2    |    35       |
|     3     |  Prod 3    |    45       |
----------------------------------------

如何将这些组合在一起,以便获得赞助商的名称以及他们推荐的每个产品名称和产品价格? INNER JOINLEFT JOIN 似乎只通过了其中一种产品,但不是全部。

【问题讨论】:

  • @TowfikAlrazihi 他只加入了 2 个表,而不是 3 个表。
  • 从外观上看,这些表远未标准化。您应该对实体进行分区。除非您的赞助商表中的两个产品是相关的——也就是说,每个赞助商总是有两个产品——否则您应该有一个赞助商表、一个产品表和一个推荐表。
  • sponsors table: sponsor_id, sponsor_name, email, location, etc... => vendor table: vendor_id, vendor_name, etc... => products table: product_id, vendor_id, product_name, price, etc... => recommendations table: recommendation_id, sponsor_id, product_id

标签: php mysql join left-join inner-join


【解决方案1】:

加入两次。

SELECT s.name, p1.ProductName AS product_1_name, p1.ProductPrice AS product_1_price, p2.ProductName AS product_2_name, p2.ProductPrice AS product_2_price
FROM sponsers AS s
JOIN products AS p1 ON s.ProductID1 = p1.ProductID
JOIN products AS p2 ON s.ProductID2 = p2.ProductID

【讨论】:

  • product_1_nameproduct_2_name 的因素在哪里?
  • 这些是结果列的别名,因此您可以访问他们推荐的两种产品。
  • 为什么您的sponsors 表中有多个列用于他们推荐的产品?如果他们想推荐超过 2 种产品会怎样?为他们推荐的每个产品设置一行不是更好吗?
  • 你说得对,应该是这样的。此外,如果我添加第二个连接,我会返回一个空对象。一个连接工作正常,第二个却不行。
  • 强调,如果我使用 s.name、b.productName 和 c.ProductName 而不是 b1 和 b2,我会得到想要的结果。
猜你喜欢
  • 2014-02-07
  • 2015-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多