Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser la clause WITH dans MySQL ?

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