2016-04-12 37 views
1

我在某些SQL工作上有點卡住了。基本上,我有3個不同的表格,看起來像這樣:(注意:「數字」應該是一本書的ID號碼,數字重複意味着它是同一本書,我改變它是爲了這樣做,爲了簡單)多個表中的SQL不同值

表A:

Number Name Surname 
1  Bob  Bobinson 
1  Paul Paulster 
2  Simon Simones 
3  Anton Antonio 
etc. 

表B:

Number Book 
1  Taken 
1   
1   
2  Taken 
2  Taken 
3   
3  Taken 
3  Taken 
etc. 

表C:

Number  Pages 
1   245 
2   147 
3   512 
etc. 

我需要做的是爲每個不同的名稱和姓氏統計其在表B中重複的次數,然後計算每個的總頁碼。 回答表應該是這樣的:

Bob Bobinson 3 735 
Paul Paulster 3 735 
Simon Simones 2 294 
Anton Antonio 3 1536 

我想是這樣的:

SELECT Name, Surname, Count(A.Number = B.Number) FROM A, B, C; 

是的,我會說實話:我絕對不知道它需要什麼樣子。之後我嘗試實現WHILE A.Number = B.Number,但它對我來說並不成功。任何幫助將不勝感激。

P.S. 「採取」是爲了稍後檢查哪一個數字是最多的。

+1

每日提示:切換到現代,明確的'JOIN'語法! – jarlh

+0

爲什麼鮑勃和保羅共享相同的ID? – jarlh

+0

@jarlh他們是一本書的合着者,數字指向不同的書籍,但爲了使表格更易於閱讀,我在這裏改變了這一點。 – Anstane

回答

3

這應該得到你想要的東西:

select A.Name, B.Surname, count(*), C.Pages 
    from TableA 
     Join TableB on A.Number = B.Number 
     Join TableC on A.Number = C.Number 
group by A.Name, B.Surname, C.Pages; 

或者你可以用一個子查詢做到這一點,如果它使隨後的變化更容易,但一般來講這些不執行,以及:

select A.Name, B.Surname, 
     (select count(*) 
      from TableBB 
     where B.Number = A.Number) As CNT, 
     C.Pages 
    from TableA 
     Join TableC on A.Number = C.Number; 
+0

確實如此。謝謝!我真的需要習慣使用Join。 – Anstane

+0

沒問題。你可能已經知道這一點,但是如果你要試着弄清楚每本書有多少被下一次拍攝,你應該可以通過總結一個案例陳述來完成,例如總結(B書='採取'時的情況1 else 0 end)。 – MightyRearranger

相關問題