Generating a range of numbers in MySQL

前端 未结 11 1852
一个人的身影
一个人的身影 2020-11-22 15:07

How do I generate a range of consecutive numbers (one per line) from a MySQL query so that I can insert them into a table?

For example:

nr
1
2
3
4
5
         


        
11条回答
  •  长发绾君心
    2020-11-22 15:54

    Here is one way to do it set-based without loops. This can also be made into a view for re-use. The example shows the generation of a sequence from 0 through 999, but of course, it may be modified to suit.

    INSERT INTO
        myTable
        (
        nr
        )
    SELECT
        SEQ.SeqValue
    FROM
    (
    SELECT
        (HUNDREDS.SeqValue + TENS.SeqValue + ONES.SeqValue) SeqValue
    FROM
        (
        SELECT 0  SeqValue
        UNION ALL
        SELECT 1 SeqValue
        UNION ALL
        SELECT 2 SeqValue
        UNION ALL
        SELECT 3 SeqValue
        UNION ALL
        SELECT 4 SeqValue
        UNION ALL
        SELECT 5 SeqValue
        UNION ALL
        SELECT 6 SeqValue
        UNION ALL
        SELECT 7 SeqValue
        UNION ALL
        SELECT 8 SeqValue
        UNION ALL
        SELECT 9 SeqValue
        ) ONES
    CROSS JOIN
        (
        SELECT 0 SeqValue
        UNION ALL
        SELECT 10 SeqValue
        UNION ALL
        SELECT 20 SeqValue
        UNION ALL
        SELECT 30 SeqValue
        UNION ALL
        SELECT 40 SeqValue
        UNION ALL
        SELECT 50 SeqValue
        UNION ALL
        SELECT 60 SeqValue
        UNION ALL
        SELECT 70 SeqValue
        UNION ALL
        SELECT 80 SeqValue
        UNION ALL
        SELECT 90 SeqValue
        ) TENS
    CROSS JOIN
        (
        SELECT 0 SeqValue
        UNION ALL
        SELECT 100 SeqValue
        UNION ALL
        SELECT 200 SeqValue
        UNION ALL
        SELECT 300 SeqValue
        UNION ALL
        SELECT 400 SeqValue
        UNION ALL
        SELECT 500 SeqValue
        UNION ALL
        SELECT 600 SeqValue
        UNION ALL
        SELECT 700 SeqValue
        UNION ALL
        SELECT 800 SeqValue
        UNION ALL
        SELECT 900 SeqValue
        ) HUNDREDS
    ) SEQ
    

提交回复
热议问题