[MySQL] count w 2 tabelach jednocześnie

0

Witam,
chciałbym zrobić Count(*) w 2 tabelach jednocześnie.

Moje zapytanie jest takie:
SELECT login,COUNT(DISTINCT cid) as clientCount,COUNT(DISTINCT lid) as licCountFROMadministration_usersas au,client_usersas cu,licence as lic

cid jest kluczem cu.
lid jes tkluczem lic.

tabele są powiązane kluczami.

Gdy wartości count są >0 wszystko jest ok. Problem pojawia się gdy jedna z nich jest zerem. Znalazłem że można to zagnieżdżonymi selectami zrobić ale nie bardzo wiem jak sie za to zabrać.

Prosze o pomoc.

0

powinieneś dać warunki dla połączenia tabel

0

prosiłbym o przykład...

0

podaj strukturę tabel

0

administration_users:
userID integer
login varchar(20)
password varchar(20)
...

client_users:
cid integer
admin integer (Foreign na userID)
vendorName varchar(100)
...

licence:
lid integer
client integer (Foreign na cid)
...

0

moze lepiej napisz jaki wynik cie interesuje

domyslam sie ze chcesz pokazac za dla kazdego admina czy sa przypisani uzytkownicy i licencje (do userow)
napisales ze problemem jest przypadek kiedy jeden z countow jest zero
ale czy poprawna jest sytuacja kiedy pod admina1 podpiety jest user1 i user2, a do user1 zero licencji, a do user2 3 licencje
wiec w tym przypadku oba county sa >0, ale do jednego z userow nie ma zadnych licencji

po pierwsze count grupuje rekordy po jakis kryteriach (w klauzuli group by, jesli jej nie ma, zlicza wszytkie z zapytania), wiec uzycie 2 count'ow w jednym select jest nielogiczne, bo zwroca te same wartosci

  1. wiec zaczalbym od zliczenia ile licencji przypisanych jest do klienta (usera)
    select client, count(*) from licence group by client
  2. polacz to z rekordami userow
    select * from client_user CU
    left join (select client, count(*) as licCount from licence group by client) as C
    on C.client=CU.cid
  3. polacz z adminami i zlicz dla adminow clientow
    select adminID, isnull(count(),0) as clientsCount, sum(CU.licCount) from administration_users AU
    left join (
    select CU.cid,CU.admin, isnull(C.licCount, 0) as licCount from client_user CU
    left join (select client, count(
    ) as licCount from licence group by client) as C
    on C.client=CU.cid
    ) as CU on AU.userID=CU.admin
    group by AU.adminID

isnull(a,b) - dziala tak ze jesli a jest null zwraca b (to jest z t-sql) jaki jest odpowiednik dla mysql nie wiem, zawsze mozesz uzyc case

1 użytkowników online, w tym zalogowanych: 0, gości: 1