2016-04-14 36 views
1

我有我的数据库在SQL语言谁收集来自多个表中的信息与条件

courses         degree_plan 
--------------------     ------------------------     
course  course_no     major  course_no 
--------------------     ------------------------ 
CHEM101  1      COE    1 
Math101  2      SWE    1 
             SWE    2 

student         equal 
-------------------------------  ---------------------------------------- 
course_no  ID  grade  course_no course equivalent ID 
-------------------------------  ---------------------------------------- 
1    5544  A   1  CHEM101 chemistry 1 5544 
1    5533  A   2  Math101 mathematics 1 5533 
2    5533  B 

我写此查询

SELECT courses .course,equal.equivalent ,equal.id FROM courses LEFT JOIN 
equal ON equal.Course_no=courses.course_no 
    LEFT JOIN degree_plan ON degree_plan.no =courses.no LEFT JOIN student 
    ON courses.no= student.no AND student.id=5533 WHERE degree_plan.major='SWE'; 

当我运行它给我这样

这些表
---------------------------------------------- 
course  equivalent  equal.id 
---------------------------------------------- 
CHEM101 Digital design 5544 
Math101 mathematics 1  5533 

我不希望那是因为给我(数字设计5544)对于另一个学生 我想给我像下面

在表我想这样

---------------------------------------------- 
course  equivalent  equal.id 
---------------------------------------------- 
CHEM101 null    null 
Math101 mathematics 1  5533 

回答

0

如果我理解正确的话,你都带有degree_plan型“SWE”的课程之后是,然后从[等于]和[学生]:学生ID 5533.

SELECT courses .course,equal.equivalent ,equal.id 
FROM courses 
INNER JOIN degree_plan ON degree_plan.no =courses.no 
LEFT JOIN equal ON equal.Course_no=courses.course_no AND id=5533 
LEFT JOIN student ON courses.no= student.no 
WHERE degree_plan.major='SWE'; 

数据试试上面的,我觉得你很接近,但你带回柱子是来自[等于],而不是[学生]:所以如果你想通过将该表放在JOIN子句中的学生ID来过滤它们。

你不会真的出现使用[学生]:在您的结果集,所以你可以简化为

SELECT courses .course,equal.equivalent ,equal.id 
FROM courses 
INNER JOIN degree_plan ON degree_plan.no =courses.no 
LEFT JOIN equal ON equal.Course_no=courses.course_no AND id=5533 
WHERE degree_plan.major='SWE';