我正在编写一个应用程序,我在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数据库,所以我不知道有任何更高级的方法来解决这个问题。
答案 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
语法。