Můžete použít pouze agregační funkce jako COUNT()
v HAVING
nebo v SELECT
klauzule při GROUP BY
se používá. WHERE
klauzule funguje na řádcích, které pocházejí z FROM
doložka. Neproběhla žádná agregace, takže agregační funkce nemají žádný smysl.
Vypadá to, že chcete najít v tabulce ZÁPIS všechny studenty, kteří se objevují více než jednou. Pak chcete získat více podrobností o těchto studentech. Existuje potenciálně mnoho způsobů, jak to udělat, ale já bych doporučil dílčí dotaz.
SELECT s.*
FROM student AS s
JOIN (
SELECT e.sno
FROM enroll AS e
GROUP BY e.sno
HAVING COUNT(*) > 1
) AS e
ON e.sno = s.sno
ORDER BY s.age DESC
LIMIT 10
Dílčí dotaz za JOIN
provede první výpočet (který mají studenti v ENROLL více řádků) a v podstatě vytvoří pseudotabulku se seznamem ID studentů. Protože provádíme vnitřní spojení, pouze řádky v tabulce STUDENT, které mají sno
v našem poddotazu se zobrazí. O to se v podstatě postará ON
doložka.
Protože jste v komentáři řekli, že chcete mít možnost uplatňovat na studenty další podmínky, přidal jsem nějaký příklad kódu, kde by se to stalo. Protože tyto informace pocházejí z tabulky STUDENT, lze je provést mimo poddotaz. Neuvedl jsi konkrétně, co „nejstarší studenti“ znamenají, takže jsem jen předpokládal, že chceš, aby se 10 nejstarších zapsalo do více kurzů. Měli byste být schopni upravit na základě vašich potřeb.
Dejte mi vědět, pokud něco z toho nedává smysl, a pokusím se to vysvětlit podrobněji.