MySQL加入第三个表的“反弹”

时间:2010-04-25 20:44:55

标签: mysql join

我有3个MySQL表。

使用 company_id company_name

公司 product_id company_id

产品 带有 product_id product_name

名称以及有关该产品的其他信息

我正在尝试在给定product_name的一个查询中输出company_nameproduct_id

基本上我需要来自名称和公司表的信息,它们之间的链接是产品表。

如何进行需要从第三张桌子“反弹”的联接?

这样的东西,但这显然不起作用:

SELECT product_name, company_name
FROM names
LEFT OUTER JOIN companies ON 
    (names.product_id = products.product_id and products.company_id = companies.company_id)
WHERE product_id = '12345'

2 个答案:

答案 0 :(得分:3)

select n.product_name, c.company_name 
from names n
left outer join products p on n.product_id = p.product_id
left outer join companies c on p.company_id = c.company_id
where n.product_id = '12345' 

答案 1 :(得分:1)

你几乎拥有它,你只需要在查询中包含第三个表作为另一个连接:

SELECT product_name, company_name
FROM names
LEFT JOIN products ON names.product_id = products.product_id
LEFT JOIN companies ON products.company_id = companies.company_id
WHERE product_id = '12345'

另外,您应该注意,如果您使用LEFT JOIN,那么如果制作该产品的公司未知,则公司名称可能为NULL。因此,您需要在代码中测试它以避免异常。如果您知道它永远不应该为NULL,或者您想要明确地排除您不了解公司的产品,那么在这两种情况下都使用INNER JOIN而不是LEFT JOIN。