[英]Can Inner join be used effeciently with RIGHT or LEFT Join together in single mysql query
[英]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.