为了简化问题,我们假设这是针对学校数据库的,并且我们有3个表。在这所学校,学生可以参加多个课程,其中有多个课程,我们在DB中存储有关可用课程的信息,每门课程以及学生目前正在学习的课程和课程。一次检索关系数据库中的列
表courses
有2列,cs_id
和cs_name
。表lessons
有3列,ls_course
存储了课程的课程ID,ls_number
- 标识课程内的课程的序列号和ls_name
。最后一个表students
存储学生ID,st_id
,该课程中的课程ID和当前课程st_course
和st_lesson
。一些示例数据:
courses
+-------+----------+
| cs_id | cs_name |
+-------+----------+
| 1 | Course A |
| 2 | Course B |
+-------+----------+
lessons
+-----------+-----------+--------------+
| ls_course | ls_number | ls_name |
+-----------+-----------+--------------+
| 1 | 1 | Lesson One |
| 1 | 2 | Lesson Two |
| 1 | 3 | Lesson Three |
| 2 | 1 | Lesson One |
| 2 | 2 | Lesson Two |
| 2 | 3 | Lesson Three |
+-----------+-----------+--------------+
students
+-------+-----------+-----------+
| st_id | st_course | st_lesson |
+-------+-----------+-----------+
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 2 | 2 | 2 |
+-------+-----------+-----------+
正如您所看到的,我们目前有2名学生,而ID 2的学生目前正在同时参加2门课程。在课程A中,她在第三课中,在课程B中,在第二课中。我想要的是检索课程一个学生目前在上市但不作为:
SELECT * FROM students WHERE st_id = 2;
这将返回过滤行,但我想检索课程和课程ID 和名为他们。要获得课程名称专栏中,我应该这样做:
SELECT s.*, c.cs_name
FROM students s, courses c
WHERE s.st_id = 2 AND s.st_course = c.cs_id
导致:
+-------+-----------+-----------+----------+
| st_id | st_course | st_lesson | cs_name |
+-------+-----------+-----------+----------+
| 2 | 1 | 3 | Course A |
| 2 | 2 | 2 | Course B |
+-------+-----------+-----------+----------+
远,我可以得到的是:
SELECT s.*, c.cs_name, l.ls_name
FROM students s, courses c, lessons l
WHERE
s.st_id = 2 AND
s.st_course = c.cs_id AND
s.st_lesson = l.ls_number
但我怎么能检索课程ID和章节在课程表中检查一个匹配,是否有可能?我想结果是:
+-------+-----------+-----------+----------+--------------+
| st_id | st_course | st_lesson | cs_name | ls_name |
+-------+-----------+-----------+----------+--------------+
| 2 | 1 | 3 | Course A | Lesson Three |
| 2 | 2 | 2 | Course B | Lesson Two |
+-------+-----------+-----------+----------+--------------+
关于课程名称,它们与本示例中的每门课程并不完全相同。这只是我想要做的简单化。 – sidyll