Car*_*arí 3 sql t-sql sql-server
我有一个NN表,举个例子说教师和主题:
有一张Teacher表如下:
+---------------+-----------------------+
| Id | Name |
+---------------+-----------------------+
| 1 | John Williams |
| 2 | Erika Miller |
+---------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
有一张Subject表如下:
+---------------+-----------------------+
| Id | Name |
+---------------+-----------------------+
| 1 | Music |
| 2 | Art |
| 3 | Languages |
| 4 | Geography |
+---------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
还有一个TeacherTeachesSubject如下:
+---------------+-----------------------+
| TeacherId | SubjectId |
+---------------+-----------------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 3 |
| 2 | 4 |
+---------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
只有每个表有超过10000个条目.
我需要做一个查询,返回我这样的事情:
+---------------+-----------------------+
| Teacher | SubjectsOfThatTeacher |
+---------------+-----------------------+
| John Williams | Music, Art, Languages |
| Erika Miller | Languages, Geography |
+---------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)
我现在正在做的是:
SELECT * FROM Teachers;
将结果保存在数组中.
在每个循环中迭代执行此查询的数组:
SELECT Name
FROM Subjects inner join "everything"
WHERE TeacherTeachesSubject.TeacherId = actualteacherid;
Run Code Online (Sandbox Code Playgroud)将结果保存为String,用逗号分隔.
每次我想从表中选择所有数据时,我都会进行10000次查询.
你知道如何有效地开展这项工作吗?我真的不需要逗号,我只需要它在String中作为String在HTML列中显示.
使用SQL Server 2017,使用STRING_AGG():
SELECT t.Name, STRING_AGG(s.Name, ', ') SubjectsOfThatTeacher
FROM Teacher t
INNER JOIN TeacherTeachesSubject tts ON tts.TeacherId = t.Id
INNER JOIN Subject s ON s.Id = tts.SubjectId
GROUP BY t.Id, t.Name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |