Autor Zpráva
danhill
Profil
Zdravím,
potřebuji poradit jak sestavit dotaz MYSQL.
Jde o to, že mám dvě tabulky. V jedné tabulce jsou testy. Je tam mimo jiné ID a název testu.
V druhé tabulce mám otázky a odpovědi. Tedy je tam ID otázky ID testu z první tabulky, otázka samotná a odpověd ABC...
Tak a já bych potřeboval jeden dotaz, který mi vybere všechny testy, u kterých chybí minimálně jedna odpověď, tedy hodnota ve sloupci answer je výchozí NULL.

Ovšem problém je v tom, že na to potřebuji jít obráceně, tedy jako výchozí tabulku potřebuji zachovat SELECT * FROM test a nikoli abych právě JOINoval z tabulky Question do tabulky test, tak bych to dokázal, ale obráceně nevím zda je to vůbec možné, protože samozřejmě otázek je vždy více než testů.
Ale vím, že zde jste SQL kouzelníci a dokážete všechno :) .
Děkuji moc.
Kajman
Profil
Zkuste něco jako

SELECT t.*,
       ch.chybi
FROM   testy t
       JOIN (SELECT o.id_testu,
                    Count(*) chybi
             FROM   otazky o
             WHERE  o.answer IS NULL
             GROUP  BY o.id_testu) ch
         ON t.id = ch.id_testu
danhill
Profil
Mockrát děkuji :) Jdu to vyzkoušet.
danhill
Profil
Nasazeno a funguje.
Ještě jednou děkuji za navedení na správnou cestu. Samotnému by mi to nedocvaklo.
danhill
Profil
Kajman:
Zdravím.
Potřebuji se znovu vrátit k tomuto dotazu.
Musel jsem použít LEFT JOIN aby mi dotaz vracel všechny záznamy z mateřské tabulky "testy".
Výsledek pak správně vypíše testy a kolik odpovědí chybí k danému testu.
V tabulce s testy mám nyní ale i testy, které nemají žádné otázky v tabulce s otázkami a odpovědmi.
A se stávajícím dotazem tohle nerozliším, výsledek bude NULL i u testu, který vlastně nemá žatím žádnou otázku.
Tedy stávají dotaz potřebuji rozšířit tak, aby vracel buď hodnotu NULL, jakože prostě test nemá žádné otázky, 0 nebo něco jiného kdy prostě test má vyplněné všechny odpovědi a nebo int 1-x , kdy test sice otázky má, ale chybí u nich odpověď či odpovědi.
Kajman
Profil
SELECT t.*,
       coalesce(ch.otazek,0) otazek,
       ch.chybi
FROM   testy t
       LEFT JOIN (SELECT o.id_testu,
                         Count(*) otazek,
                         Count(*)-Count(o.answer) chybi
                  FROM   otazky o
                  GROUP  BY o.id_testu) ch
         ON t.id = ch.id_testu
danhill
Profil
Kajman:
Paráda, moc děkuji, to jsem přesně potřeboval.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0