2016-04-12 29 views
1

Bazı SQL işlerinde biraz sıkışmış durumdayım. Temel olarak, 3 farklı tabloya sahibim, şöyle bir şeye benzemekteyim: (NOT: "Sayı" nın bir kitabın kimlik numarası olması, tekrarlanan rakamların aynı kitap olduğu anlamına gelir. basitlik)Birden çok tablodaki SQL farklı değerleri

Tablo A:.

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

Tablo B:

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

Tablo C:

Number  Pages 
1   245 
2   147 
3   512 
etc. 

Yapmam gereken şey, her bir Farklı Ad ve Soyad için, sayılarının Tablo B'de yinelenme sayısını ve ardından her biri için toplam sayfa sayısını saymasıdır. cevap tablo bu gibi görünmelidir:

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

Evet, dürüst olacağım:

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

böyle bir şey denedim ben benziyor gerekeni kesinlikle hiçbir ipucu var. WHILE A.Number = B.Number'i uygulamaya çalıştım ama benim için çalışmıyor. Herhangi bir yardım büyük takdir edilecektir.

P.S. "Alınan" daha sonra, en çok hangi numaraya sahip olduğunu kontrol etmek içindir.

+1

Günün ipucu: modern, açık 'JOIN' sözdizimine geçin! – jarlh

+0

Bob ve Paul neden aynı kimliği paylaşıyor? – jarlh

+0

@jarlh Bir kitabın ortak yazarları, farklı kitaplara işaret eden rakamlar var, ama burada tabloların daha kolay okunması için bunu değiştirdim. – Anstane

cevap

3

Bu istediğini elde etmelidir:

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; 

Alternatif Bir alt sorgu ile bunu yapabileceğimi daha kolay, daha sonraki değişikleri yaparsa, genellikle de bu yapmazlar konuşan olsa:

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

Gerçekten var. Teşekkür ederim! Gerçekten Join'i kullanmaya alışmam gerek. – Anstane

+0

Sorun değil. Bunu zaten biliyor olabilirsiniz, ancak her bir kitaptan kaçının alınacağını denemek ve denemek isterseniz, bunu bir durum ifadesi yani toplamı toplayarak yapabilmeniz gerekir (B.Book = 'Taken' olduğunda 1 başka 0 son). – MightyRearranger

İlgili konular