2013-05-29 90 views
0

我有兩個表。例如:Teacher(name, classCode)ClassSession(classCode, session, name)如何防止在查詢時重複某些屬性

和查詢的是:找到所有的老師,教體A

例如:

Teacher 
peter 1 
Mary 2 

ClassSession 
1 summer database 
1 spring database 
... 

我這樣的查詢:

select * from teacher,ClassSession 
where Teacher.classCode = ClassSession.classCode 

而結果將是:

Peter 1 summer database 
Peter 1 spring database 

結果是重複屬性的教師名字,因爲一個主題可以在多個會話中教。所以,我的問題是:我如何查詢以避免這種重複。結果應該只有Peter這個名字。

Peter 1 
+0

後,你只需要在名字'peter'回來? – Woot4Moo

+0

是的。或者,只是表中的所有屬性教師 – hqt

+0

您是否爲查詢測試了DISTINCT關鍵字? – Mojtaba

回答

1

試試這個:

select distinct tch.* 
from teacher tch ,ClassSession cls 
where Tch.classCode = Cls.classCode 

不過,我想提出以下建議:

使用適當的加入語法..

select distinct tch.* 
from teacher tch 
join ClassSession cls on Tch.classCode = Cls.classCode 

而且,不知道爲什麼你需要加入兩個表,因爲你沒有從ClassCode表中獲取任何信息。如果需要第二個表類名,請執行下列操作:

select distinct tch.*,cls.Name 
from teacher tch 
join ClassSession cls on Tch.classCode = Cls.classCode 
+0

不應使用隱式語法。 – Kermit

1

我的理解是這樣的:

find all teacher that teaches subject A  

查詢應該是這樣的:

select * from teacher,ClassSession 
where Teacher.classCode = ClassSession.classCode 
and ClassSession.classCode = 'A'; 

,因爲所有的原始查詢正在返回無處不在teacher.classCode與任何給定的classCode匹配。

現在在去除重複Peter條目一個變得更加困難一點而言,這樣你很可能希望做的是這樣的:

select ClassSession.* from teacher,ClassSession 
    where Teacher.classCode = ClassSession.classCode 
    and ClassSession.classCode = 'A' 
    and Teacher.name = 'Peter'; 

現在這樣做是停止查詢teacher表,因爲你已經知道你在找誰,並且將它作爲where子句的一部分提供。

OP更新

select distinct teacher.* from teacher,ClassSession 
    where Teacher.classCode = ClassSession.classCode 
    and ClassSession.classCode = 'A'; 
+0

不應使用隱式語法。 – Kermit

+1

@FreshPrinceOfSO請你澄清一下嗎?當我能學到東西時總是有益的。 – Woot4Moo

+0

[顯式vs隱式SQL連接](http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins) – Kermit

相關問題