1

我正在使用SQL Server 2008. 考虑下表:

学生

╔════╦═══════════╦══════════╗
║ ID ║ FIRSTNAME ║ LASTNAME ║
╠════╬═══════════╬══════════╣
║  1 ║ joe       ║ Smith    ║
║  2 ║ frank     ║ Smith    ║
║  3 ║ Scott     ║ Smith    ║
╚════╩═══════════╩══════════╝

课程

╔════╦═════════╦════════════════╗
║ ID ║  NAME   ║  DESCRIPTION   ║
╠════╬═════════╬════════════════╣
║  1 ║ Physics ║ PHYSICS COURSE ║
║  2 ║ MATH    ║ COURSE         ║
╚════╩═════════╩════════════════╝

STUDENT_COURSE

╔════════════╦═══════════╦═══════╗
║ STUDENT_ID ║ COURSE_ID ║ GRADE ║
╠════════════╬═══════════╬═══════╣
║          1 ║         1 ║     9 ║
║          2 ║         1 ║     8 ║
║          3 ║         1 ║     6 ║
╚════════════╩═══════════╩═══════╝

我需要为 MATH 课程的所有用户插入默认等级 10,如果该用户不存在这样的等级。

我不熟悉 Microsoft SQL Server 和 T-SQL。你能帮我解决这样的问题吗?

4

1 回答 1

3
INSERT INTO STUDENT_COURSE (Student_ID, course_ID, grade)
SELECT  a.ID as StudentID, b.ID as Course_ID, 10 AS grade
FROM    Student a 
        CROSS JOIN Course b
        LEFT JOIN 
        (
            SELECT  d.*
            FROM    STUDENT_COURSE d
                    INNER JOIN Course e
                        ON d.Course_ID = e.ID
            WHERE   e.Name = 'Math'
        ) c ON  a.ID = c.student_ID AND
                b.ID = c.course_ID 
WHERE   c.student_ID IS NULL AND 
        b.Name = 'Math'

如果您列出表上的所有记录,则输出STUDENT_COURSE

MySQL> SELECT * FROM STUDENT_COURSE

╔════════════╦═══════════╦═══════╗
║ STUDENT_ID ║ COURSE_ID ║ GRADE ║
╠════════════╬═══════════╬═══════╣
║          1 ║         1 ║     9 ║
║          2 ║         1 ║     8 ║
║          3 ║         1 ║     6 ║
║          1 ║         2 ║    10 ║
║          2 ║         2 ║    10 ║
║          3 ║         2 ║    10 ║
╚════════════╩═══════════╩═══════╝
于 2013-03-23T08:46:38.997 回答