Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL/MySQL查询帮助_Mysql_Sql - Fatal编程技术网

SQL/MySQL查询帮助

SQL/MySQL查询帮助,mysql,sql,Mysql,Sql,我需要一些关于这个SQL查询的帮助。它旨在检索与Jaci Walker具有相同S.S_等级值的学生姓名,并在BG大楼中与Jaci Walker一起学习CS.C_SE_id课程 我在7号线上遇到了麻烦。我需要能够确保人们已经注册了与Jaci Walker相同的课程。我不确定该在该部分的WHERE语句中添加什么 可以在此处看到数据库架构: SELECT S.S_Fname, S.S_LName FROM Student S, Enrollment E, CourseSection CS, Locat

我需要一些关于这个SQL查询的帮助。它旨在检索与Jaci Walker具有相同S.S_等级值的学生姓名,并在BG大楼中与Jaci Walker一起学习CS.C_SE_id课程

我在7号线上遇到了麻烦。我需要能够确保人们已经注册了与Jaci Walker相同的课程。我不确定该在该部分的WHERE语句中添加什么

可以在此处看到数据库架构:

SELECT S.S_Fname, S.S_LName
FROM Student S, Enrollment E, CourseSection CS, Location L
WHERE S.S_id = E.S_id
AND E.C_SE_ID = CS.C_SE_id
AND L.Loc_id = CS.Loc_ID
AND S.S_Level = (SELECT S.S_Level FROM Student S WHERE S.S_Fname = "Jaci" AND S.S_Lname = "Walker")
AND CS.C_SE_id = (SELECT CS.C_SE_id FROM CourseSection CS WHERE **?**)
AND L.Loc_id = (SELECT L.Blodg_code FROM Location L WHERE L.Blodg_code = "BG");

如果我正确理解了这个问题,这应该是可行的:

SELECT s.S_Fname, s.S_LName
FROM Student s

INNER JOIN Enrollment e ON s.S_id = e.S_id
INNER JOIN CourseSection cs ON e.C_SE_ID = cs.C_SE_id
INNER JOIN Location l ON cs.Loc_ID = l.Loc_id

INNER JOIN Student s2 ON s.S_Level = s2.S_Level AND s2.S_Fname = "Jaci" AND s2.S_Lname = "Walker"
INNER JOIN Enrollment e2 ON s2.S_id = e2.S_id
INNER JOIN CourseSection cs2 ON e2.C_SE_ID = cs2.C_SE_id

WHERE l.Loc_id = l.Blodg_code = "BG"
AND cs.Course_ID = cs2.Course_ID 

我现在无法测试,很快就完成了。也许可以找到更好的解决方案?

不访问我无法测试的数据,但以下内容可能有助于第一个内部选择将所有相关的C\u SE\u ID都调回

SELECT S.S_Fname, S.S_Lname
FROM Student S, Enrollment E
WHERE S.S_id = E.S_id
        AND E.C_SE_ID IN (SELECT CS.C_SE_ID
        FROM Student S2, Enrollment E2, CourseSection CS, Location L
        WHERE S2.S_id = E2.S_id
                AND E2.C_SE_ID = CS.C_SE_ID
                AND CS.Loc_id = L.Loc_id
                AND L.Blodg_code = 'BG'
                AND S2.S_Fname = 'Jaci'
                AND S2.S_Lname = 'Walker')
        AND S.S_Level = (SELECT S3.S_Level
        FROM Student S3
        WHERE S3.S_Fname = 'Jaci'
                AND S3.S_Lname = 'Walker')
        AND S.S_Fname <> 'Jaci'
        AND S.S_Lname <> 'Walker'

我建议在内部查询中使用不同的别名,例如S2、E2,以避免混淆。

我将首先使用当前SQL语法,使用连接条件,而不是使用WHERE子句来显示表之间的关系。通过这种方式,您可以完成所有表关联,并且可以更好地直观地确认您已经配置了这些元素。。。然后,附加你正在寻找的标准

我在这里所做的就是使用一个预查询结果别名jaciclassinsinbg,它获取所有注册的Jaci类,并且只获取添加到JOIN子句到location表的building BG的类。WHERE条款只适用于Jaci

根据这个结果,我列出了Jaci参加的所有课程。我抓取了她的身份证,S_级别和C_SE_身份证条目

从那以后,只需根据Jaci在同一个班级中录取的所有学生的C_SE_ID,将所有其他学生的注册表连接回去。但是,我排除了via,而不是。。。列表中Jaci的学生ID。。。我们知道她上的课,我们在找其他人

最后,根据通用注册将该结果连接回学生表。现在,我们可以将Jaci的通用S_水平标准与这些学生联系起来

现在,你可以得到你想要显示的任何细节。。。在这种情况下,我抓住了每个学生,以及他们和Jaci的共同点。一名学生可能在多个班级上课。这将显示每个。如果你只关心一个例子,我会把顶部改成

选择不同的S2.S\u FName、S2.S\u LName

SELECT
      JaciClassesInBG.Course_Code,
      JaciClassesInBG.Course_Name,
      S2.S_FName,
      S2.S_LName
   from 
      ( SELECT 
              S.ID,
              S.S_Level,
              CS.C_SE_ID,
              C.Course_Code,
              C.Course_Name
           FROM
              Student S
                 JOIN Enrollment E
                    ON S.S_id = E.S_id
                    JOIN CourseSection CS
                       ON E.C_SE_ID = CS.C_SE_id
                       JOIN Location L
                          ON L.Loc_id = CS.Loc_ID
                          AND L.Blodg_Code = "BG"
                    JOIN Course C
                       ON CS.Course_ID = C.Course_ID
           WHERE
                  S.S_Fname = "Jaci" 
              AND S.S_Lname = "Walker" ) JaciClassesInBG
      JOIN
         Enrollment E2
            ON JaciClassesInBG.C_SE_ID = E2.C_SE_ID
            AND NOT JaciClassesInBG.S_ID = E2.S_ID
            JOIN Students S2
               ON E2.S_ID = S2.S_ID
               AND JaciClassesInBG.S_Level = S2.S_Level

…你的问题是?是的,你的问题是什么?任何错误消息或结果?和L.Loc_id=从位置L选择L.Blodg_代码,其中L.Blodg_代码=BG;看起来是多余的,因为您可以简单地使用和L.Blodg_code=BG过滤结果,而不是使用您拥有的结果,因为该表已经加入。正确的加入如何syntax@tftd我不知道该把什么放在7号线的哪里?是的,谢谢你的帮助。我现在不能测试,但我会在早上测试。