Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać klauzuli WITH w MySQL?

MySQL przed wersją 8.0 nie obsługuje klauzuli WITH (CTE w żargonie SQL Server; Subquery Factoring w Oracle), więc pozostajesz z użyciem:

  • Tabele TYMCZASOWE
  • Tabele pochodne
  • widoki wbudowane (w praktyce to, co reprezentuje klauzula WITH — są one wymienne)

Prośba o tę funkcję pochodzi z 2006 roku.

Jak wspomniano, podałeś kiepski przykład – nie ma potrzeby wykonywania podselekcji, jeśli w żaden sposób nie zmieniasz danych wyjściowych kolumn:

  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

Oto lepszy przykład:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Preferowany silnik MySQL – MyISAM lub InnoDB

  2. Jak „odszesnać” liczbę w MySQL

  3. Jak zresetować hasło roota MySQL

  4. Migracja z Oracle do MySQL

  5. Jak zarządzać sesjami w Node.js za pomocą Passport, Redis i MySQL