MySQL sebelum versi 8.0 tidak mendukung klausa WITH (CTE dalam bahasa SQL Server; Subquery Factoring di Oracle), jadi Anda tinggal menggunakan:
- Tabel TEMORARY
- Tabel turunan
- tampilan sebaris (secara efektif mewakili klausa WITH - mereka dapat dipertukarkan)
Permintaan untuk fitur tersebut dimulai pada tahun 2006.
Seperti yang disebutkan, Anda memberikan contoh yang buruk - tidak perlu melakukan subselect jika Anda tidak mengubah output kolom dengan cara apa pun:
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
Berikut ini contoh yang lebih baik:
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