2016-04-14 2 views
0

У меня есть таблица 'статей'Как сделать выбор из двух таблиц?

 
+-------------+ 
| articles | 
+----+--------+ 
| id | title | 
+----+--------+ 
| 1 | title1 | 
+----+--------+ 
| 2 | title2 | 
+----+--------+ 
| 3 | title3 | 
+----+--------+ 

стол 'каталог'

 
+---------------------+ 
|  catalogue  | 
+----+--------+-------+ 
| id | group | name | 
+----+--------+-------+ 
| 1 | group1 | name1 | 
+----+--------+-------+ 
| 2 | group1 | name2 | 
+----+--------+-------+ 
| 3 | group2 | name3 | 
+----+--------+-------+ 
| 4 | group2 | name4 | 
+----+--------+-------+ 

связывания таблицы 'bindTable'

 
+------------+--------------+-------+ 
|    bindTable   | 
+------------+--------------+-------+ 
| id_article | id_catalogue | value | 
+------------+--------------+-------+ 
|  1  |  2  | 1 | 
+------------+--------------+-------+ 
|  1  |  3  | 4 | 
+------------+--------------+-------+ 
|  3  |  1  | 2 | 
+------------+--------------+-------+ 
|  3  |  3  | 1 | 
+------------+--------------+-------+ 
|  3  |  4  | 3 | 
+------------+--------------+-------+ 

и мне нужно, чтобы получить результат, как в таблице 'результата' , где я могу получить пары «имя_каталога: значение» для выбранного элемента из таблицы «статья»

 
+-----------------------------------------------------+ 
|      result      | 
+------------+---------------+----------------+-------+ 
| article_id | article_title | catalogue_name | value | 
+------------+---------------+----------------+-------+ 
|  1  |  title1 | group1_name2, | 1 | 
|   |    | group2_name3 | 4 | 
+------------+---------------+----------------+-------+ 
|  3  |  title3 | group1_name1, | 2 | 
|   |    | group2_name3, | 1 | 
|   |    | group2_name4 | 3 | 
+------------+---------------+----------------+-------+ 

Может ли кто-нибудь сказать мне строку запроса с одним запросом БД? Спасибо за внимание.

 
My vision: 
    SELECT b.id_article, a.title, c.group, c.name, b.value 
    FROM bindTable b 
    JOIN articles a ON a.id = b.id_articles 
    JOIN catalogue c ON c.id = b.id_catalogue 
    WHERE b.id_article = 1 

, но мне нужно один ряд с парами c.name & b.value для одного A.id

+0

значение также concat by ',' like 'catalogue_name'? –

+0

не имеет значения, только имя – Alaksander

+0

Какие вопросы вы пытались? Вы узнали, как делать JOINs? – user3741598

ответ

0

Избранная с внутренним соединением

select a.article_id, a.article_title, b.catalogue_name, b.value 
from bindTable as c 
inner join articles as a on a.id = c. article_id 
inner join catalogues as b on c. id_catalogue = b.id 
0

Это должно сделать это.

SELECT articles.id AS article_id, 
     articles.title AS article_title, 
     CONCAT_WS('_', catalogue.group, catalogue.name) AS catalogue_name, 
     bindTable.value AS value 
FROM bindTable 
    INNER JOIN articles ON bindTable.id_article = articles.id 
    INNER JOIN catalogue ON bindTable.id_catalogue = catalogue.id 
+1

Я не думаю, что вам нужна 'LEFT JOIN' простая' INNER JOIN' должна работать –

+0

Действительно, спасибо за комментарий, я обновлю свой ответ. –

+0

извините за мой английский, я ищу по «заголовку» из «статей», и мне нужно добавить в таблицу результатов соответствующие поля для идентификатора заголовка из каталога таблицы и его значение с таблицей привязки, например, для title1 из статей, которые я получаю двумя перекрывающимися поле из таблицы «bindtable» с идентификатором «1» и со значениями «1» и «4». В таблице «каталог» по найденному id я получаю его имя: «group1 name2» и «group2 name3». Наконец мне нужно что-то как «title1» | "group1 name2 = 1" | "group2 name3 = 4" – Alaksander

Смежные вопросы