MySQL преди версия 8.0 не поддържа клаузата WITH (CTE на език на SQL Server; Факторинг на подзаявки в Oracle), така че ви остава да използвате:
- ВРЕМЕННИ таблици
- ИЗВЕДЕНИ таблици
- вградени изгледи (в действителност това, което представлява клаузата WITH - те са взаимозаменяеми)
Заявката за функцията датира от 2006 г.
Както споменахме, предоставихте лош пример - няма нужда да извършвате подселекция, ако не променяте изхода на колоните по никакъв начин:
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
Ето по-добър пример:
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