Kannassa on kaksi seuraava taulua:
Taulu "jarjestajat"
id | jarjestaja ============ 1 | Firma Oy 2 | Bisnes Ky 3 | Yritys Ay
Taulu "kurssit"
id | jarjestaja_id | laskutus ========================== 1 | 1 | 1 2 | 2 | 0 3 | 1 | 0 4 | 2 | 0 6 | 1 | 1
Suoritan seuraavanlaisen kyselyn:
SELECT jarjestajat.id, jarjestaja, (COUNT(kurssit.laskutus) - SUM(kurssit.laskutus)) AS laskutettavaa FROM kurssit, jarjestajat WHERE jarjestaja_id = jarjestajat.id
Ja kysely palauttaa seuraavaa:
1 | Firma Oy | 1 2 | Bisnes Ky | 2
Ongelmana on että haluasisin kyselyn palauttavan myös järjestäjät joilla ei ole vielä yhtään kurssia. Eli haluamani lopputulos pitäisi näyttää tältä:
1 | Firma Oy | 1 2 | Bisnes Ky | 2 3 | Yritys Ay | 0
Jotenkin tämä onnistuu, mutta en ahkeralla googletuksellakaan löytänyt vastausta. Josko täältä löytyisi apu?
Kiitos jo näin etukäteen mahdollisille avunannoille.
Äkkiseltään tulisi mieleen, että toimisiko IFNULL, eli jos arvo on tyhjä, niin pakotetaan sille haluttua arvo, esim. ei kursseja. Eikös nolla ollut yhtä kuin tyhjä. ( korjatkaa viisaammat, jos väärin muistan )
Kokeile:
SELECT jarjestajat.id, jarjestaja, (COUNT(kurssit.laskutus) - SUM(kurssit.laskutus)) AS laskutettavaa FROM kurssit, jarjestajat WHERE jarjestaja_id = jarjestajat.id union select id, jarjestaja, '0' from jarjestajat where id not in (select distinct jarjestaja_id from kurssit)
Ratkaisun voi tehdä kyllä parilla muutamallakin tavalla, mutta maaginen sana tuossa voisi olla vaikka union.
Tämä voisi toimia(ei testattu MySQL:ssä)
SELECT jarjestajat.id , jarjestajat.jarjestaja , sum(case ifnull(laskutus,1) when 0 then 1 else 0 end) as laskutettavaa FROM jarjestajat LEFT OUTER JOIN kurssit on jarjestajat.id=kurssit.jarjestaja_id GROUP BY jarjestajat.id , jarjestajat.jarjestaja ORDER BY jarjestajat.id
Kiitän!
Molemmat kyselyt palauttivat juuri sitä mitä halusin.
Aihe on jo aika vanha, joten et voi enää vastata siihen.