2011-04-23 46 views
1
CREATE TABLE TR(STUDENT_ID int, SUBJECT_ID int, grade int); 
INSERT INTO tr SELECT * FROM results where results.STUDENT_ID=3; 
SELECT * FROM subjects LEFT JOIN tr ON subjects.SUBJECT_ID=tr.SUBJECT_ID; 
DROP TABLE TR; 

是否有可能将上述内容重写为一个查询?我搜遍了整个网络,仍然无法完成。我正在使用德比数据库。你能为我重写吗?左加入表和子查询

这个想法是,我想连接表格主题,它有一定数量的行,如果有特定的学生有任何匹配的表结果的结果。如果没有结果,我希望输出行只包含表格主题的数据。所以,输出行的数量将总是等于主题中的行数。

上面的代码运行良好,但它在我的程序中给我带来麻烦,因为必须创建一个表。我想避免这种情况。

回答

1
SELECT * 
FROM subjects s 
LEFT JOIN (
    SELECT * FROM 
    results r 
    WHERE r.STUDENT_ID = 3 
) x ON s.SUBJECT_ID = x.SUBJECT_ID 
+0

非常感谢!完美的作品:) – Ivan 2011-04-23 18:56:39

0

基于上面给出的示例查询,它可以作为

SELECT subjects.* FROM 
subjects LEFT JOIN results 
ON subjects.SUBJECT_ID = results.SUBJECT_ID 
WHERE results.STUDENT_ID = 3; 

我还没有和德比工作被改写。但我认为,这应该起作用。

0

SELECT * FROM subjects LEFT JOIN results ON subjects.SUBJECT_ID=results.SUBJECT_ID AND results.STUDENT_ID=3;

0

这应该是等同于

SELECT * FROM subjects 
LEFT JOIN results ON results.SUBJECT_ID = subjects.SUBJECT_ID AND results.STUDENT_ID = 3; 

假设你有一个特定的学生成绩最为一个条目。