MySQL avant la version 8.0 ne prend pas en charge la clause WITH (CTE dans le langage SQL Server ; Subquery Factoring dans Oracle), il vous reste donc à utiliser :
- Tableaux TEMPORAIRES
- Tableaux DERIVES
- vues en ligne (en fait ce que représente la clause WITH - elles sont interchangeables)
La demande pour la fonctionnalité remonte à 2006.
Comme mentionné, vous avez fourni un mauvais exemple - il n'est pas nécessaire d'effectuer une sous-sélection si vous ne modifiez en aucune façon la sortie des colonnes :
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
Voici un meilleur exemple :
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