2013-03-22 92 views
-1

请提出一个SQL查询来获取其中学生有同样的比分学生和相应科目的SQL - 查询使用加入/有/子查询 - 如何

”列表中,如果学生有不止一个相同的分数主题“

例如。

Student Subject Score 
John Science 80 
John Maths 80 
John English 80 
John French 80 
Peter Science 85 
Peter Maths 70 
Peter English 70 
Peter French 70 
Mathews French 70 

Expected Result : 
John Science 
John Maths 
John English 
John French 
Peter Maths 
Peter English 
Peter French 

尝试 -

select person , subject where person in 
(select person , score , count(score) group by person , score having count(score) > 1) 

但在这个 “彼得科学” 的出现,这是不需要。

请协助。

感谢

+0

您的外部查询没有'FROM '子句.. – Meherzad 2013-03-22 12:20:58

+0

你可以使用排名功能吗? – 2013-03-22 12:23:59

+0

@Meherzad - 刚才给出了我正在尝试的想法,而不是确切的查询。你可以看看问题陈述并提出解决方案。 – arcotenterprises 2013-03-22 12:36:59

回答

2

尝试:

select person , subject 
from table t 
    join 
    (select person , score , count(score) 
     from table 
     group by person , score having count(score) > 1 
    ) foo 
     on t.person = foo.person 
where t.person = foo.person 
    and t.score = foo.score 

的原因,你的查询没有(来自不包括表除外)工作: 你的内部查询中选择符合条件的学生和成绩。但是您的外部查询选择所有符合条件的学生的所有,这就是为什么包括“彼得科学”的原因。因此,您需要将外部查询中的结果限制为仅符合所有条件的结果。

+0

。谢谢。非常快的回复。只需要进一步的帮助。 使用vbscript连接到访问 - 语法中的任何修改。 首先尝试访问。 – arcotenterprises 2013-03-22 13:05:59

+0

我不是Access专家,但我不会_think_查询的语法修改应该被要求。它是标准的SQL。 – 2013-03-22 13:48:23

0

你应该是您使用的RDBMS告诉我们的。但是,这应该工作无处不在:

select 
    t.* 
from <tableName> t 
join (
    select 
     student, score 
    from <tableName> 
    group by 
     student, score 
    having count(*)>1 
) x 
on t.student=x.student 
and t.score=x.score 

顺便说一下你在查询失踪FROM <tableName>

0

尝试这样的:

select student, subject 
from Person 
where student + cast(score as varchar(20)) in 
( 
    select student + cast(score as varchar(20)) from Person group by student,score having count(score) > 1 
) 
0

可以达到这个目标自连接表样例如:

SELECT 
    t.Student, 
    t.Subject, 
    t.Score 
FROM Table1 AS t 
    JOIN 
    (
     SELECT Student, Score FROM Table1 GROUP BY Student, Score HAVING COUNT(*) > 1 
    ) AS t1 ON t.Student = t1.Student AND t.Score = t1.Score 

与试验数据完整的示例和创建的表,你可以在这里找到:

http://sqlfiddle.com/#!2/61f02/8