1. ホーム
  2. mysql

[解決済み] MySQLで "WITH "句はどのように使うのですか?

2022-05-26 23:21:35

質問

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

どのように解決するのですか?

バージョン8.0より前のMySQL は 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