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         ║
╚════╩═════════╩════════════════╝

TABLE 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 に答える