MySQL内连接查询多个表

12

我正在尝试连接几个表格,以下是布局示例:

订单

user_id=7 pricing id=37

产品定价

id=37 product_id=33

产品

id=33 name=test product

SQL

SELECT *
FROM orders
  INNER JOIN products_pricing
    ON orders.pricing_id = products_pricing.id
  INNER JOIN products
    ON products_pricing.product_id = products.id
WHERE orders.user_id = '7' ");

列表

id=233 user_id=7 url=test.com

使用这个SQL,我会得到一个输出,其中列出了用户ID为7的所有产品,并在while循环中列出每个产品的名称。然而,当我添加另一个名为listings的表的INNER JOIN时,该表具有一个user_id列,我需要获取与每行匹配的url,以便将产品名称与url超链接。我得到了列表表中包含的所有内容,以及上面的工作内容。我可能做错了什么,或者遗漏了什么。我已经花了几个小时来尝试解决它,但是一直得到相同的结果。有人可以帮助我吗?


请使用LEFT JOIN代替INNER JOIN。 - Muhammad Raheel
2个回答

27

尝试这个:

SELECT 
  p.id,
  p.name,
  l.url,
  o.user_id,
  o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';

SQL Fiddle示例

对于您在问题中发布的样本数据,这将为您提供:

| ID |        NAME |      URL | USER_ID | PRICING_ID |
------------------------------------------------------
| 33 | testproduct | test.com |       7 |         37 |

Mahmoud,感谢你抽出时间来帮助我。这个方法有效,但是根据查询似乎得到了7个结果,其中6个是重复的。我在phpmyadmin中运行了SQL,有什么想法是什么原因引起的吗? - Daniel
@Daniel 添加关键字 DISTINCT : SELECT DISTINCT p.id, p.name, ... 这些重复可能是由于 INNER JOIN 引起的。您能否在演示中添加一些重复数据的示例。这将会很有帮助。 - Mahmoud Gamal
我进行了更多的测试,似乎如果一个用户拥有完全相同的产品,则可以显示它们而不会重复。但是,如果向用户添加另一个产品,则会混淆哪些数据属于正确的输出,从而产生正确的结果以及使用第一个产品详细信息的其他产品的结果。这有点奇怪。 - Daniel

2

可以使用INNER JOIN来完成此操作,并在SELECT语句中获取选择列。

SELECT 
  p.id,
  p.name,
  l.url,
  o.user_id,
  o.pricing_id
FROM orders AS o
INNER JOIN products_pricing AS pp ON o.pricing_id  = pp.id
INNER JOIN products         AS  p ON pp.product_id = p.id
INNER JOIN listings         AS  l ON l.user_id = o.user_id
WHERE o.user_id ='7' 
  AND l.id = 233 
  AND l.url = 'test.com';

10
这是上面答案的复制吗? - Matthew
是的,我在选择语句中添加了fetch select列。 - user2001117

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接