Mysql
 sql >> Database >  >> RDS >> Mysql

Come si usa la clausola WITH in MySQL?

MySQL precedente alla versione 8.0 non supporta la clausola WITH (CTE nel gergo di SQL Server; Subquery Factoring in Oracle), quindi ti resta l'utilizzo:

  • Tabelle TEMPORANEE
  • Tabelle DERIVATE
  • viste in linea (in pratica ciò che rappresenta la clausola WITH - sono intercambiabili)

La richiesta della funzionalità risale al 2006.

Come accennato, hai fornito un pessimo esempio:non è necessario eseguire una sottoselezione se non stai alterando in alcun modo l'output delle colonne:

  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

Ecco un esempio migliore:

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