繁体   English   中英

我应该使用LEFT JOIN还是INNER JOIN或RIGHT JOIN将3个不同的查询合并到一个查询中

[英]Should i use LEFT JOIN OR INNER JOIN or RIGHT JOIN for joining 3 different query into a single query

第一查询

$sql="SELECT distinct(syllabus.syllabusName) as subjectName,$cid as courseId, stud.batchId as batchId,course.courseId,course.syllabusId AS subjectID,course.unitId,stud.studentID as studentID  ,concat(stud.studentFirstName,' ',stud.studentLastName,' ',stud.studentRegistrationNumber) AS studentName
            FROM studentdetails  stud           
            INNER JOIN  `coursemapping` course 
            ON  stud.`courseId`=course.courseId
            INNER JOIN syllabus syllabus
            ON  course.syllabusId=syllabus.syllabusId 
            WHERE course.courseId ='$cid' AND course.syllabusId='$sid' AND stud.`batchId`='$bid'";  

第二查询

     $sql=" SELECT A.assignmentId, A.unitId, B.assignmentName, C.assignmentsBatchId AS batchId, C.courseId AS courseId,C.assignmentMappingId, D.studentId, concat( E.studentFirstName, ' ', E.studentLastName, ' ', E.studentRegistrationNumber ) AS studentName
            FROM studentdetails E
            INNER JOIN assignmentscompleted D ON E.studentId = D.studentId
            INNER JOIN assignmentsbatch C ON D.assignmentId = C.assignmentMappingId
            INNER JOIN assignments B ON D.assignmentId = B.assignmentId
            INNER JOIN assignmentsMapping A ON B.assignmentId = A.assignmentId
            WHERE A.assignmentId = '$sid'
            AND C.assignmentsBatchId = '$bid'
            AND C.courseId ='$cid'";

第三查询

    $sql    =   "SELECT distinct(C.syllabusName) as subjectName,B.maxAccadamicMarks as marksScored,B.academicMarks as maxMarks,B.marksPercentage as percentage  
                    FROM studentdetails A INNER JOIN marks B 
                    ON A.studentId=B.studentId AND A.courseId=B.courseId AND A.batchId=B.batchId 
                    INNER JOIN syllabus C 
                    ON  B.syllabusId=C.syllabusId WHERE A.studentUserName='$studentUserName'";

在这里,我需要加入所有三个查询,以便获取主题,学生,分数,分数,百分比? 如何将所有这三个查询联接到单个查询

看起来您很可能能够将查询合并在一起,因为许多查询都使用公用表,但是如果没有表结构,我只是在编写快速而肮脏的mashup或您提供的三个查询。 我假设这些查询中的每一个都能准确地调整您所需要的内容,而没有其他任何东西。

我对第三个查询做了些微改动,以添加StudentID,以便可以将其与其他查询正确地合并在一起,并在第二个查询中注释掉了多余的信息。

select
    a.studentID as studentID,
    a.studentName as studentName,
    $cid as courseID,
    a.batchID as batchID,
    a.subjectID as subjectID,
    c.subjectName as subjectName,
    a.unitID as unitID,
    b.assignmentID as assignmentID,
    b.assignmentName as assignmentName,
    b.assignmentMappingID as assignmentMappingID,
    c.marksScored as marksScored,
    c.maxMarks as maxMarks,
    c.percentage as percentageMarks
from
(
    select 
        distinct(syllabus.syllabusName) as subjectName,
        $cid as courseID, 
        stud.batchId as batchID,
        course.courseID,
        course.syllabusId as subjectID,
        course.unitID,
        stud.studentID as studentID  ,
        concat(stud.studentFirstName,' ',stud.studentLastName,' ',stud.studentRegistrationNumber) AS studentName
    FROM 
        studentdetails  stud           
            INNER JOIN  `coursemapping` course 
                ON  stud.`courseId`=course.courseId
            INNER JOIN syllabus syllabus
                ON  course.syllabusId=syllabus.syllabusId 
    WHERE 
        course.courseId ='$cid' 
        AND course.syllabusId='$sid' 
        AND stud.`batchId`='$bid'
) a,
(
    SELECT 
        A.assignmentID, 
        A.unitID, 
        B.assignmentName, 
        C.assignmentsBatchId AS batchID, 
        C.courseId AS courseID,
        C.assignmentMappingID, 
        D.studentID, 
        --concat( E.studentFirstName, ' ', E.studentLastName, ' ', E.studentRegistrationNumber ) AS studentName
    FROM 
        studentdetails E
            INNER JOIN assignmentscompleted D 
                ON E.studentId = D.studentId
            INNER JOIN assignmentsbatch C 
                ON D.assignmentId = C.assignmentMappingId
            INNER JOIN assignments B 
                ON D.assignmentId = B.assignmentId
            INNER JOIN assignmentsMapping A 
                ON B.assignmentId = A.assignmentId
    WHERE 
        A.assignmentId = '$sid'
        AND C.assignmentsBatchId = '$bid'
        AND C.courseId ='$cid'
) b,
(
    SELECT 
        distinct(C.syllabusName) as subjectName,
        B.maxAccadamicMarks as marksScored,
        B.academicMarks as maxMarks,
        B.marksPercentage as percentage,
        A.studentID,
        a.courseID as courseID
    FROM 
        studentdetails A 
            INNER JOIN marks B 
                ON A.studentId=B.studentId 
                AND A.courseId=B.courseId 
                AND A.batchId=B.batchId 
            INNER JOIN syllabus C 
                ON  B.syllabusId=C.syllabusId 
    WHERE 
        A.studentUserName='$studentUserName'
) c
where
    a.studentID=b.studentID
    and a.studentID=c.studentID
    and a.courseID=b.courseID
    and a.courseID=c.courseID

应该在没有对单个查询进行笛卡尔连接的情况下起作用,但是如果没有表结构也很难确定。

说了这么多,我完全同意上面的一些评论者,通过合并所有这些查询,您将获得一个记录集,该记录集将在每一行上一遍又一遍地重复某些信息,这些信息对您无用。 您最好运行一个查询,将值弹出到变量中,然后根据需要使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM