2016-03-15 6 views
1

К сожалению, я не так хорош, как SQL, и я пытаюсь получить соединение между тремя выполненными таблицами.Присоединяйтесь к трем (3) таблицам MySQL

здесь грубая упрощенная структура таблицы:

links: id, url, description 
categories: id, name, path 
link_cat: link_id, cat_id 

ЗЕЬЕСТ я и добиваюсь должны иметь

links.id, link.url, link.description, categories.name, categories.path 

Где ссылки и категории сопоставляются с помощью таблицы link_cat. Я думаю, что это не должно быть слишком сложно, если для каждой ссылки есть только одна категория. Это то, что я предполагаю. Если нет, было бы неплохо иметь другой способ, который разделяет несколько категорий запятыми в поле category.name.

Надеюсь, это все понятно и не звучит слишком глупо.

ответ

1
SELECT links.id, links.url, links.description, categories.name, categories.path 
FROM links 
INNER JOIN link_cat ON links.id = link_cat.links_id 
INNER JOIN categories ON categories.id = link_cat.category_id 
+0

избил меня на 10 секунд! :) – sadmicrowave

+0

вот и все. Спасибо за ваш вклад. Я уже отработал это после того, как ответ от Parris немного ниже был не совсем прав, но ваши ударили ноготь. – Helmi

+0

На самом деле этот запрос не работает :-) http://sqlfiddle.com/#!9/6a81e/2 – Alex

1
# Add each field you want to the select list 
SELECT links.id, link.url, link.description, categories.name, categories.path 

# Add the "links" table to the list of tables to select from 
FROM links 

# Add the "link_cat" table, specify "link_id" as the common field 
JOIN link_cat USING (link_id) 

# Add the "categories" table specifying the "cat_id" as the common field 
JOIN categories USING (cat_id) 
+0

Спасибо, Вы вводите дали хорошие советы, но не работает достаточно хорошо. Я, хотя использовал его для google немного и нашел это. Хотя Филипе несколько сообщений после правильного прибивания. – Helmi

+0

Я рад, что у вас есть ответ, который работает, но я не уверен, что ответ Филипе ниже - это то, что вы ищете. Даже если он не выдавал ошибку для дубликатов псевдонимов таблицы, в ней есть избыточные декартовы объединения. –

0
SELECT link.id, link.url, link.description, categories.name, categories.path 
FROM link, categories, link_cat 
WHERE 
    link.id = link_cat.link_id 
    AND categories.id = link_cat.category_id 
+1

В настоящее время ANSI-89 следует избегать использования ANSI-92. (https://36chambers.wordpress.com/2014/02/18/t-sql-anti-patterns-ansi-89-joins/) –

+0

ваш пример работает, но пропускает таблицу link_cat в FROM. С этим вставленным в него работает. Благодарю. – Helmi

+0

@ Parris Verney спасибо! Они делают хорошие моменты в этом посте. Я адаптирую ... – obe

1
SELECT links.id, links.url, links.description, categories.name, categories.path 
FROM links 
INNER JOIN link_cat  ON link_cat.link_id = links.id 
INNER JOIN categories ON link_cat.cat_id = categories.id 
Смежные вопросы