MySQL соединяется с "отскоком" от третьей таблицы - PullRequest
1 голос
/ 26 апреля 2010

У меня есть 3 таблицы MySQL.

компании с company_id и company_name

продукты с product_id и company_id

имена с product_id , product_name и другая информация о продукте

Я пытаюсь вывести product_name и company_name в одном запросе для данного product_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 ]

3 голосов
/ 26 апреля 2010
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 голос
/ 26 апреля 2010

У вас почти все есть, вам просто нужно включить третью таблицу в качестве еще одного объединения в ваш запрос:

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 в обоих случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...