sql >> Database >  >> RDS >> Mysql

Hoe gebruik je de WITH-clausule in MySQL?

MySQL voor versie 8.0 ondersteunt de WITH-clausule niet (CTE in SQL Server-taal; Subquery Factoring in Oracle), dus u blijft achter met:

  • TIJDELIJKE tabellen
  • AFGETROKKEN tabellen
  • inline weergaven (in feite wat de WITH-clausule vertegenwoordigt - ze zijn uitwisselbaar)

Het verzoek om de functie dateert uit 2006.

Zoals vermeld, heb je een slecht voorbeeld gegeven - het is niet nodig om een ​​subselectie uit te voeren als je de uitvoer van de kolommen op geen enkele manier verandert:

  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

Hier is een beter voorbeeld:

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


  1. Wat kan het Queryplan vertellen?

  2. Hoe schrijf je een hoofdletterongevoelige query voor zowel MySQL als Postgres?

  3. GROUP_CONCAT equivalent in Django

  4. Hoe installeer ik de Python MySQLdb-module met pip?