WITH RECURSIVE... [Re: Column headings in csv]

Luuk <[email protected]> Sun, 24 May 2020 15:21:57 +0200
Newsgroups comp.databases.mysql
Message-ID <[email protected]>
On 24-5-2020 14:00, Richard Yates wrote:
> On Sun, 24 May 2020 11:34:45 +0200, Luuk <[email protected]> wrote:

>>
>> Ok, example, selecting the two lowest and the two highest values:
>>
>> WITH RECURSIVE cte (n) AS
>> (
>>    SELECT 1
>>    UNION ALL
>>    SELECT n + 1 FROM cte WHERE n < 5
>> )
>> (SELECT *
>>FROM cte
>> order by n
>> limit 2 )
>> union all
>> (SELECT *
>>FROM cte
>> order by n desc
>> limit 2 )
>> order by n
>> ;
>>
>> 1) The 'with recursive' creates a temporary view containing 5 records
>>from 1 until (including) 5.
>>
>> 2) In the 'SELECT * FROM cte order by n limit 2', the ORDER BY is needed
>> to make sure where get the first two records. Because of the LIMIT there
>> is also a need to know where to start, this can only be done using ORDER BY.
>>
>> 3) after the union all we do the same select, again with 'order by' to
>> make sure the highest two values are selected.
>>
>> 4) the final order by is needed to produce 1,2,4,5  and not 1,2,5,4
> 
> Sorry, that example is beyond me and I do not know what it is intended
> to show. And I've never run across RECURSIVE before.
> 


Try this:

WITH RECURSIVE cte (n) AS
(
   SELECT 1
   UNION ALL
   SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;


The 'WITH [RECURSIVE]' defines a temporry table with the data from the 
select statement that is following it.

The 'SELECT * from cte' shows  the output of the select, in this case 
numbers from 1 to 5;

In this case it is used to create a temporary table to have some data 
for a simple example....

-- 
Luuk