T-sql语句查询每门专业类课程的间接先修课信息,要求输出课程号、课程名、先修课号、先修课程名、间接先修课号
时间: 2024-10-20 07:12:33 浏览: 40
数据库应用技术之实验5- SQL语言综合练习
在SQL中,要查询每门专业类课程的间接先修课信息,通常需要设计数据库表结构来存储课程之间的依赖关系,比如有两张表:`Courses` 和 `Prerequisites`。`Courses` 表包含课程的基本信息(如课程号、课程名),而 `Prerequisites` 表则表示课程之间的先修关系(主键通常是两个课程ID)。
假设我们有这样的简单结构:
```sql
CREATE TABLE Courses (
CourseID INT PRIMARY KEY,
ClassName VARCHAR(50),
MajorClass VARCHAR(50)
);
CREATE TABLE Prerequisites (
CourseAID INT,
CourseBID INT,
FOREIGN KEY (CourseAID) REFERENCES Courses(CourseID),
FOREIGN KEY (CourseBID) REFERENCES Courses(CourseID)
);
```
要查询间接先修课信息,可以使用递归查询(如果数据库支持的话,例如SQL Server 2008及以上版本或MySQL 8.0+的WITH RECURSIVE):
```sql
WITH CTE AS (
SELECT A.CourseID, A.CourseName, A.MajorClass, B.CourseID AS DirectPreRequisite
FROM Courses A
JOIN Prerequisites P ON A.CourseID = P.CourseAID
JOIN Courses B ON P.CourseBID = B.CourseID
WHERE A.CourseID = '目标课程ID' -- 替换为你想要查询的具体课程ID
UNION ALL
SELECT C.CourseID, C.CourseName, C.MajorClass, D.CourseID
FROM CTE AS CurrentStep
JOIN Prerequisites Q ON CurrentStep.DirectPreRequisite = Q.CourseAID
JOIN Courses D ON Q.CourseBID = D.CourseID
)
SELECT * FROM CTE;
```
这个查询首先找到直接的先修课,然后对每一个直接先修课再次查找其先修课,直到找不到新的先修课为止。请将 '目标课程ID' 替换成你想查询的具体课程的ID。
阅读全文