MySQL で「WITH」句を使用するにはどうすればいいですか? 質問する

MySQL で「WITH」句を使用するにはどうすればいいですか? 質問する

すべての 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

おすすめ記事