连接仅在一列中不同的多个行

时间:2013-12-29 23:39:48

标签: sql sqlite

我正在编写一个应用程序,我在SQLite中有以下表格:

当然:

_id | name | a | b

大学:

_id | name | c | d

course_university:

course_id | university_id

Course_university将课程与提供这些课程的大学联系起来。这是一个多对多的关系。我需要一个能够提供以下内容的请求

course._id | course.name | course.a | university.name | university.c

我认为可行的查询是

SELECT c._id, c.name, c.a, u.name, u.c
FROM course AS c, university AS u, course_university AS cu
WHERE c._id=cu.course_id AND u._id=cu.university_id

问题在于,如果有多个大学提供的课程,上述查询将显示两次,唯一的区别在于大学专栏。有没有办法连接一次课程的大学名称,所以而不是得到

20 | Calculus | 23 | Stanford | 5 |
20 | Calculus | 23 | Harvard | 5 |

我会

20 | Calculus | 23 | Stanford & Harvard | 5 |

在我的情况下,可能有超过2所大学在一个课程上一起工作,所以如果它适合连接三行,那么很好。这是我第一次处理SQL数据库,所以我不知道有任何更高级的方法来解决这个问题。

1 个答案:

答案 0 :(得分:1)

以下是您使用group_concat()

的示例
SELECT c._id, c.name, c.a, group_concat(u.name, ' & ') as universities, u.c
FROM course_university cu join
     course c
     on c._id = cu.course_id join
     university AS u, 
     on u._id = cu.university_id
group by c._id, c.name, c.a, u.c;

我还将查询语法更改为使用显式的ANSI标准join语法。