【问题标题】:MySQL Inner Join Query Multiple TablesMySQL内连接查询多表
【发布时间】:2013-01-18 08:40:32
【问题描述】:

我正在尝试合并一些表格,布局示例如下:

订单

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,我得到一个输出,它给出了 user_id 为 7 的所有产品,它会在一个 while 循环中列出每个产品名称。但是,当我为名为 listings 的表添加另一个 INNER JOIN 时,该表有一个 user_id 列,我需要为匹配的每一行获取一个 url,以便我可以将产品名称与 url 超链接,我也会得到列表表中包含的所有内容作为上面的工作内容。我要么做错了,要么错过了一些东西。我花了几个小时试图弄清楚,但一直得到相同的结果。谁能帮帮我?

【问题讨论】:

  • 而不是 INNER JOIN 使用 LEFT JOIN

标签: mysql sql join


【解决方案1】:

试试这个:

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 Demo

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

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

【讨论】:

  • Mahmoud,感谢您抽出宝贵时间帮助我。这可行,但是我似乎根据查询得到了 7 个结果,其中六个是重复的,我在 phpmyadmin 中运行了 sql,有什么想法会导致这种情况吗?
  • @Daniel 添加关键字DISTINCTSELECT DISTINCT p.id, p.name, ... 这个重复可能是因为INNER JOIN。您能否在演示中为这些重复项添加一些示例数据。它会有所帮助。,
  • 我做了一些更多的测试,似乎如果你为一个用户拥有所有相同的产品,它会很好地显示它们而没有重复。但是,如果您向用户添加另一个产品,它将混淆哪些数据属于正确的输出,从而产生正确的结果,然后使用第一个详细信息为其他产品生成结果。有点奇怪。
【解决方案2】:

是的,这可以使用 INNER 连接本身来完成。并在 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';

【讨论】:

  • 这是上述答案的副本吗?
  • 是的,我在 select 语句中添加了 fetch select 列
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 2011-12-24
  • 1970-01-01
  • 2015-08-20
  • 2020-06-06
  • 1970-01-01
  • 1970-01-01
  • 2014-01-06
相关资源
最近更新 更多