Выбор двух отсчетов для двух объединений в одном запросе - PullRequest
1 голос
/ 29 октября 2010
create table Autorzy(ID int, imie varchar, nazwisko varchar);
create table Wydawnictwa(ID int, nazwa varchar, adres varchar, tel varchar);
create table Ksiazki(ID int, ISBN bigint, wydawnictwo_id int, data date, ilosc int, tytul varchar);
create table KsiazkaAutor(ID int, autor_id int, ksiazka_id int);
create table Recenzje (id int, tresc varchar, autor_id int, ksiazka_id int);

Я могу сделать:

select a.imie, a.nazwisko, count(ka.id) as IloscKsiazek
from autorzy a
left join KsiazkaAutor ka on a.id=ka.autor_id
group by a.imie, a.nazwisko;

, чтобы выбрать счет из KsiazkaAutor

или

select a.imie, a.nazwisko, count(r.id) as IloscRecenzji
from autorzy a
left join Recenzje r on a.id=r.autor_id
group by a.imie, a.nazwisko;

, чтобы выбрать счет из Recenzje.

Как я могу получить оба счета в одном SELECT?

РЕДАКТИРОВАТЬ: 1-й выбор:

"Болеслав"; "Прус"; 3
"Адам"; "Ковальски"; 5
"Стивен"; "Король"; 3
"Анджей"; "Сапковский"; 3
"Владислав"; "Реймонт"; 3
"Ричард"; "Докинз"; 3
"Zofia"; "Nałkowska"; 3
"Henryk"; "Sienkiewicz"; 3
"Terry"; "Pratchett"; 3
"Eliza"; "Orzeszkowa"; 4
"Адам ";" Мицкевич "; 2
" Иоанн Р.Р. ";" Толкин "; 5
" Миколай ";" Коперник "; 1
" Лень ";" Жмердзи "; 0
" Ян";" Nowak "; 5
" Kamil ";" Kowalik "; 0
" Ignacy ";" Krasicki "; 3

2-й выбор:

" Bolesław ";"Prus"; 0
"Адам"; "Kowalski"; 0
"Stephen"; "King"; 0
"Andrzej"; "Sapkowski"; 0
"Władysław"; "Reymont"; 0
" Ричард ";" Докинз "; 0
" Зофия ";" Nałkowska "; 0
" Генрик ";" Сенкевич "; 1
" Терри ";" Пратчетт ";0
"Элиза"; "Ожешкова"; 2
"Адам"; "Мицкевич"; 0
"Джон Р.Р."; "Толкиен"; 0
"Миколай"; "Коперник"; 0
"Leń"; "iermierdzący"; 0
"Jan"; "Nowak"; 0
"Kamil"; "Kowalik"; 0
"Ignacy"; "Krasicki"; 0

ваш ответ:

"Болеслав"; "Прус"; 3; 0
"Адам"; "Ковальский"; 5; 0
"Стивен"; "Король"; 3; 0
"Andrzej"; "Sapkowski"; 3; 0
"Władysław"; "Reymont"; 3; 0
"Richard"; "Dawkins"; 3; 0
"Zofia"; "Nałkowska "; 3; 0
" Henryk ";" Sienkiewicz "; 3; 3
" Terry ";" Pratchett "; 3; 0
" Eliza ";" Orzeszkowa "; 8; 8
"Адам"; "Мицкевич"; 2; 0
"Джон Р.Р."; "Толкин"; 5; 0
"Миколай"; "Коперник"; 1; 0
"Лень"; ""mierdzący""; 0; 0
" Ян ";" Новак "; 5; 0
" Камиль ";" Kowalik "; 0; 0
" Воспламенение ";" Красицки "; 3; 0

1 Ответ

4 голосов
/ 29 октября 2010

Да, вы можете сделать:

select a.imie, a.nazwisko, 
count(ka.id) as IloscKsiazek1,
count(r.id) as IloscKsiazek2
from autorzy a
left join KsiazkaAutor ka on a.id=ka.autor_id
left join Recenzje r on a.id=r.autor_id
group by a.imie, a.nazwisko;

Вы также можете попробовать ключевое слово distinct в предложении count:

select a.imie, a.nazwisko, 
count(distinct ka.id) as IloscKsiazek1,
count(distinct r.id) as IloscKsiazek2
from autorzy a
left join KsiazkaAutor ka on a.id=ka.autor_id
left join Recenzje r on a.id=r.autor_id
group by a.imie, a.nazwisko;
...