すべての SQL Server クエリを MySQL に変換していますが、その中のクエリはWITH
すべて失敗します。次に例を示します。
WITH t1 AS
(
SELECT article.*, userinfo.*, category.*
FROM question
INNER JOIN userinfo ON userinfo.user_userid = article.article_ownerid
INNER JOIN category ON article.article_categoryid = category.catid
WHERE article.article_isdeleted = 0
)
SELECT t1.*
FROM t1
ORDER BY t1.article_date DESC
LIMIT 1, 3
ベストアンサー1
MySQL バージョン 8.0 より前WITH句をサポートしていません(SQL Server の用語では CTE、Oracle ではサブクエリ ファクタリング)、次のものを使用する必要があります。
- 一時テーブル
- 派生テーブル
- インライン ビュー (実質的には WITH 句が表すもの - 互換性あり)
この機能の要望は 2006 年に遡ります。
前述したように、あなたが提供した例は適切ではありません。列の出力をまったく変更しない場合は、サブセレクトを実行する必要はありません。
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
より良い例を以下に示します。
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