加入表以获取具有两个id的列的名称

时间:2017-09-19 08:58:37

标签: mysql

我的数据库设计糟糕,需要正确连接两个表。 我需要查询Table1中的所有字段并替换books_ordered 表2中的第一个标题具有相同的ID。 每本书id的第一个标题是德语,我只需要德语标题。

编辑:我更新了表格以使其更具体

这是一个示例表。

表1

|___id___|__name__|_books_ordered_|
|    1   | peter  |     24,25,26  |
|    2   | olaf   |     25,26     |
|    3   | walter |     24        |
|    4   | tim    |     24,25     |

表2

|___id___|____title____|___book_id___|
|    1   | Das Haus    |     24      |
|    4   | The house   |     24      |
|    7   | la maison   |     24      |
|    10  | la casa     |     24      |
|    2   | Der Baum    |     25      |
|    5   | The tree    |     25      |
|    8   | L'arbre     |     25      |
|    11  | El árbol    |     25      |
|    3   | Das Boot    |     26      |
|    6   | The boat    |     26      |
|    9   | Le bateau   |     26      |
|    12  | El barco    |     26      |

到目前为止我的查询是:

SELECT t.name, tr.title, FROM Table1 AS t 
INNER JOIN Table2 AS tr 
ON t.books_ordered = tr.book_id 
WHERE tr.id<3

但结果只是给了我book_ordered中第一个id的标题。有点像这样:

|___name____|___title_____|
|   Peter   |   Das Haus  |
|   Peter   |   Das Haus  |
|   Peter   |   Das Haus  |
|   Olaf    |   Der Baum  |
|   Olaf    |   Der Baum  |
|   Walter  |   Das Haus  |
|   Tim     |   Das Haus  |
|   Tim     |   Das Haus  |

我需要的结果应该是这样的:

|___name____|___title__________________________|
|   Peter   |   Das Haus, Der Baum, Das Boot   |
|   Olaf    |   Der Baum, Das Boot             |
|   Walter  |   Das Haus                       |
|   Tim     |   Das Haus, Der Baum             |

2 个答案:

答案 0 :(得分:0)

试试这个

SELECT t.name, GROUP_CONCAT(tr.title SEPARATOR ', '), FROM Table1 AS t 
INNER JOIN Table2 AS tr 
ON t.books_ordered = tr.book_id 
WHERE tr.id<3
GROUP BY t.name

答案 1 :(得分:0)

我用链接的重复问题解决了它。 这个具体问题的答案是:

SELECT distinct t.name, tr.title 
    FROM Table1 AS t 
    INNER JOIN Table2 AS tr 
    ON find_in_set(tr.book_id, t.books_ordered)