MySQL内部连接查询多个表

MySQL内部连接查询多个表,mysql,sql,join,Mysql,Sql,Join,我正在尝试合并一些表格,下面是布局示例: 命令 user_id=7 pricing id=37 产品定价 id=37 product_id=33 产品 id=33 name=test product SQL 列表 id=233 user_id=7 url=test.com 有了这个SQL,我得到一个输出,给出了用户id为7的所有产品,它将在while循环中列出每个产品的名称。然而,当我为一个名为listings的表添加另一个内部连接时,它有一个user_id列,我需要为匹配的每一行获取一

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

命令

user_id=7 pricing id=37
产品定价

id=37 product_id=33
产品

id=33 name=test product
SQL

列表

id=233 user_id=7 url=test.com
有了这个SQL,我得到一个输出,给出了用户id为7的所有产品,它将在while循环中列出每个产品的名称。然而,当我为一个名为listings的表添加另一个内部连接时,它有一个user_id列,我需要为匹配的每一行获取一个url,这样我就可以用url链接产品名称,我得到listings表中包含的所有内容以及上面的工作内容。我不是做错了,就是错过了什么。我花了几个小时试图弄明白,但一直得到同样的结果。有人能帮我吗?

试试这个:

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';
对于您在问题中发布的示例数据,这将为您提供:

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

是的,这可以使用内部联接本身来完成。在select语句中使用fetch 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列。马哈茂德,谢谢你花时间帮助我。这是可行的,但是我似乎根据查询得到了7个结果,其中6个是重复的。我在phpmyadmin中运行了sql,你知道这是什么原因吗?@Daniel添加关键字
DISTINCT
选择DISTINCT p.id,p.name,
这可能是由于
内部连接造成的。请在演示中为这些副本添加一些示例数据。这将是有帮助的。我做了一些更多的测试,似乎如果你有一个用户的所有相同的产品,它显示他们没有重复很好。但是,如果您向用户添加另一个产品,它将混淆哪些数据属于正确的输出,从而生成正确的结果,然后使用第一个详细信息生成其他产品的结果。有点奇怪。
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';