2010-04-25 2 views
1

У меня есть 3 таблицы MySQL.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' 

ответ

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' 
+0

+1 Хе-хе-хед меня на 25 секунд. –

+0

Ну это было легко. Я узнал что-то новое! – Enkay

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

+0

Спасибо вам большое! Это было намного проще, чем все, что я пробовал! Что касается названия компании, это всегда известно. Система не допускает нулевые имена компаний. – Enkay

+0

@ Энкай: Я думаю, вы, возможно, пропустили точку. Речь идет не о том, является ли столбец company_name нулевым или нет, но что строка в таблице продуктов, которая присоединяется к product_id к company_id, может отсутствовать, что приведет к тому, что имя_компании будет NULL, даже если этот столбец не имеет значения NULL. Вы должны попытаться понять разницу между INNER JOIN и OUTER JOIN и убедиться, что вы используете правильный. –

+0

Вы правы, я не понял, о чем вы говорили вначале. Я думаю, что в этом случае я действительно должен использовать соединение INNER. Я только начинаю понимать более сложные операторы mysql. Спасибо. – Enkay