2016-04-12 6 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でその番号が繰り返された回数を数え、それぞれの合計ページ数を数えることです。 回答テーブルは次のようになります。

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

ええ、私は正直なところでしょう:

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

が、私はこのような何かを試してみました、私はそれが見えるように必要なものは絶対見当もつかない。後でA.Number = B.Numberを実装しようとしましたが、うまくいきません。どんな助けでも大歓迎です。

P.S. 「取られた」とは、後で、どの番号が最も大きいかを調べるためのものです。

+1

今日のヒント:現代的で明示的な 'JOIN'構文に切り替える! – jarlh

+0

BobとPaulが同じ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

それは確かにあります。ありがとうございました!私は実際に結合を使用することに慣れる必要があります。 – Anstane

+0

問題ありません。あなたは既にこれを知っているかもしれませんが、次に取られる各書籍の数を試してみようとする場合は、ケースステートメントの合計(B.Book = 'Taken'の場合1 else 0 end)。 – MightyRearranger

関連する問題