在一个查询中连接多个行

时间:2014-03-12 06:27:39

标签: mysql performance

我有两张具有以下设计的表格

  • movies:ID,姓名
  • genres:movie_id,genre

每部电影都可以有多种类型。

我希望列出所有电影及其类型,所以我会得到类似的内容:

name1 genre1,genre2,genre3
name2 genre2,genre6,genre8

我希望能够使用单个查询(我使用MySQL 5.6)来完成它。

我考虑过使用连接但不能设法让它真正起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您的查询

select m.name, group_concat(g.genre) from movies m, genres g
where m.id = g.movie_id group by m.name;

以下是一些示例数据:

mysql> create table movies (id int, name varchar(100));
Query OK, 0 rows affected (0.04 sec)

mysql> create table genres (movie_id int, genre varchar(100));
Query OK, 0 rows affected (0.02 sec)

mysql> insert into movies values (1, 'Terminator');
Query OK, 1 row affected (0.01 sec)

mysql> insert into movies values (2, 'Lord of the Rings');
Query OK, 1 row affected (0.01 sec)

mysql> insert into genres values (1, 'action');
Query OK, 1 row affected (0.01 sec)

mysql> insert into genres values (1, 'sci-fi');
Query OK, 1 row affected (0.01 sec)

mysql> insert into genres values (2, 'fantasy');
Query OK, 1 row affected (0.00 sec)

mysql> insert into genres values (2, 'adventure');
Query OK, 1 row affected (0.01 sec)

以下是查询的输出:

mysql> select m.name, group_concat(g.genre) from movies m, genres g where m.id = g.movie_id group by m.name;
+-------------------+-----------------------+
| name              | group_concat(g.genre) |
+-------------------+-----------------------+
| Lord of the Rings | adventure,fantasy     |
| Terminator        | sci-fi,action         |
+-------------------+-----------------------+