MySQL starší než verze 8.0 nepodporuje klauzuli WITH (CTE v jazyce SQL Server; Faktorování poddotazů v Oracle), takže vám zbývá použít:
- TEČASNÉ tabulky
- ODVODENÉ tabulky
- inline pohledy (ve skutečnosti to, co představuje klauzule WITH – jsou vzájemně zaměnitelné)
Žádost o tuto funkci pochází z roku 2006.
Jak již bylo zmíněno, uvedli jste špatný příklad – není třeba provádět podvýběr, pokud žádným způsobem neměníte výstup sloupců:
SELECT *
FROM ARTICLE t
JOIN USERINFO ui ON ui.user_userid = t.article_ownerid
JOIN CATEGORY c ON c.catid = t.article_categoryid
WHERE t.published_ind = 0
ORDER BY t.article_date DESC
LIMIT 1, 3
Zde je lepší příklad:
SELECT t.name,
t.num
FROM TABLE t
JOIN (SELECT c.id
COUNT(*) 'num'
FROM TABLE c
WHERE c.column = 'a'
GROUP BY c.id) ta ON ta.id = t.id