Select + count от 2 таблици

5 отговора 175 прегледа
#1

Select + count от 2 таблици

Здравейте,

Може ли в една заявка да наблъскам заедно

- няколко записа от таблица1

и

- броя на записите от таблица2, в които стойността на една определена колона е равна на стойността на определена колона от таблица1

Ето го моят опит, който предполагам ще ви покаже по-добре, какво ми трябва. Не работи, разбира се, иначе нямаше да питам.

select
tab1.id as id,
count(tab2.id) as numberOfIDsOfTab2
from tab1, tab2
where tab2.drugoId = tab1.id;

Грешката, която се получава е

ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

Гррр.

Предварително благодаря за помощта.

_nmk

Отговор
в отговор на nmk #2

Re: Select + count от 2 таблици

Не беше лошо да кажеш с каква база си.

Може би това ти трябва:

select
tab1.id as id,
count(tab2.id) as numberOfIDsOfTab2
from tab1, tab2
where tab2.drugoId = tab1.id
GROUP BY tab1.id


Отговор
в отговор на NDeu #3

Re: Select + count от 2 таблици

ох, ах... MySQL

Дотук хбаво, и аз си го помислих и пробвах, ама връща празен сет, ако няма никакви записи в таб2, които да отговарят на условието. А на мен ми трябва, да ми върне нула (разликата между нула (0) и празен сет е ясна?).

Отговор
в отговор на nmk #4

Re: Select + count от 2 таблици

select
tab1.id as id,
count(tab2.id) as numberOfIDsOfTab2
from tab1 LEFT JOIN tab2 ON tab2.drugoId = tab1.id
GROUP BY tab1.id

Е тук нищо няма:[линк]
Отговор
в отговор на ro6avia #5

Re: Select + count от 2 таблици

Чудесия, точно каквото ми трябваше.

Ще имаш ли малко време и желание да обясниш, какво точно се случва и защо иначе не ставаше?

Отговор
в отговор на nmk #6

Re: Select + count от 2 таблици

Защото LEFT JOIN включва всички редове от "лявата" таблица независимо дали има съответстващи редове в "дясната"

Пробвай това:

CREATE x (a INT);
CREATE y (a INT, b INT);
INSERT INTO x VALUES(1), (2);
INSERT INTO y VALUES(1, 10), (1, 20);

SELECT * FROM x, y WHERE x.a=y.a;
SELECT * FROM x LEFT JOIN y ON x.a=y.a;

И внимателно разгледай резултатите.
Добаве още малко редове и ще ти се изясни съвсем.

salle.online.bg/sig
Отговор