Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como você usa a cláusula WITH no MySQL?


MySQL anterior à versão 8.0 não suporta a cláusula WITH (CTE no jargão do SQL Server; Subquery Factoring no Oracle), então você fica usando:
  • Tabelas TEMPORÁRIAS
  • Tabelas DERIVADAS
  • visualizações inline (efetivamente o que a cláusula WITH representa - elas são intercambiáveis)

A solicitação do recurso remonta a 2006.

Como mencionado, você forneceu um exemplo ruim - não há necessidade de realizar uma subseleção se você não estiver alterando a saída das colunas de forma alguma:
  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

Aqui está um exemplo melhor:
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