2013-03-22 31 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