sql >> データベース >  >> RDS >> Mysql

ループ内ループでメモリ制限に達するループ内ループ

    ある範囲の日数を生成し、シーズンテーブルに参加し、単一のクエリを使用して目的の結果を取得します。例:

    SELECT dates.Date,
           coalesce(s.price, 0) AS price
    FROM
      (SELECT a.Date
       FROM
         ( SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Date, '0' AS price
          FROM
            (SELECT 0 AS a
             UNION ALL SELECT 1
             UNION ALL SELECT 2
             UNION ALL SELECT 3
             UNION ALL SELECT 4
             UNION ALL SELECT 5
             UNION ALL SELECT 6
             UNION ALL SELECT 7
             UNION ALL SELECT 8
             UNION ALL SELECT 9) AS a
          CROSS JOIN
            (SELECT 0 AS a
             UNION ALL SELECT 1
             UNION ALL SELECT 2
             UNION ALL SELECT 3
             UNION ALL SELECT 4
             UNION ALL SELECT 5
             UNION ALL SELECT 6
             UNION ALL SELECT 7
             UNION ALL SELECT 8
             UNION ALL SELECT 9) AS b
          CROSS JOIN
            (SELECT 0 AS a
             UNION ALL SELECT 1
             UNION ALL SELECT 2
             UNION ALL SELECT 3
             UNION ALL SELECT 4
             UNION ALL SELECT 5
             UNION ALL SELECT 6
             UNION ALL SELECT 7
             UNION ALL SELECT 8
             UNION ALL SELECT 9) AS c) a
       WHERE a.Date BETWEEN '$from' AND '$to'
       ORDER BY a.Date) dates
    LEFT JOIN seasons s ON dates.Date BETWEEN s.start AND s.END
    

    複雑な内部クエリは、一時テーブルの作成を回避します( generateから取得)日付範囲からの日数 )最大1000日間機能しますが、一時テーブルを作成しても問題ありません。



    1. ルックアップテーブルはどのくらい重要ですか?

    2. Solr検索インデックスをデータベースとして使用する-これは間違っていますか?

    3. PostgreSQLの式インデックスの実際的な制限

    4. MySQLWorkbenchはMACOSX上のローカルMySQLサービスに接続できません