algoloto - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 36 sur 36

algoloto



  1. #31
    invite210e909c

    Re : algoloto


    ------

    Citation Envoyé par Médiat Voir le message
    Bonjour,

    On peut facilement remplacer la requête "LISTE" pour des BD ne proposant pas de table DUAL ni de connect by (ORACLE, donc) par un select quelconque dans une table dictionnaire (ayant au moins 49 lignes)

    On peut améliorer les performances :

    Code:
    with LISTE as (select rownum as N from DUAL connect by rownum <= 49),
         RESUL (N, LST, NB, ECART, parite) 
               as (select N, ' ' || N || ' ', 1, 0, mod(n,2) from LISTE
              union all
                   select B.N, a.LST || B.N || ' ', a.NB + 1, 
                          case when abs(a.n - b.n) = 1 then 1
                               else 0
                          end,
                          case when a.parite = -1 then -1
                               when a.parite = mod(b.n, 2) then a.parite
                               else -1
                          end
                   from RESUL a inner join LISTE B on a.LST not like '% ' || B.N || ' %'
                                                  and a.n < b.n
                                                  and a.ecart*case when abs(a.n - b.n) = 1 then 1
                                                                   else 0
                                                              end != 1
                                                  and a.NB <= 4)
    select *
    from RESUL 
    where NB     = 5
      and parite = -1;
    Bonjour et merci pour ton aide.

    Je ne connais pas SQL , j'ai donc installé MySQL avec MySQL WorkBench.

    J'ai essayé le script mais j'ai une erreur:

    Code:
    File "<string>", line 1
        with LISTE as (select rownum as N from DUAL connect by rownum <= 49),
                                   ^
    SyntaxError: invalid syntax
    
    Error executing script.
    Merci

    -----

  2. #32
    Médiat

    Re : algoloto

    Bonjour,

    La requête est écrite sous ORACLE, je ne connais pas MySQL, et en particulier je ne sais pas si MySQL gère les requêtes récursives, si oui, il est facile de remplacer la requête liste...

    Vous pouvez, soit télécharger ORACLE et SQLDEVELOPPER (gratuits tous les 2), mais si vous n'en avez pas l'usage par ailleurs, c'est un peu ridicule, soit vous inspirer de cette requête pour écrire un programme dans n'importe quel langage acceptant la récursion.
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  3. #33
    invite0bbe92c0

    Re : algoloto

    Bonjour,

    Citation Envoyé par Médiat Voir le message

    La requête est écrite sous ORACLE, je ne connais pas MySQL, et en particulier je ne sais pas si MySQL gère les requêtes récursives, si oui, il est facile de remplacer la requête liste....
    Il gére les requêtes récursives, à ma connaissance, mais pas l'instruction "connect by" (dont on se rappellera qu'elle est hors norme SQL et a été ajouté par Oracle pour gérer la récursivité, avant la version 11g, à partir de laquelle elle n'est plus vraiment nécessaire).

  4. #34
    Médiat

    Re : algoloto

    La partie récursive est essentielle pour la requête RESUL, qui ne contient pas de connect by, et pour la requête LISTE, il suffit de la remplacer par

    select rownum from UneTable where rownum <= 49;

    rownum étant le N° de ligne renvoyée (cela doit exister sous une forme ou une autre sous MySQL (dans SQLServer c'est row_number()), et à la place de UneTable, il suffit de mettre n'importe quel nom de table existante e t ayant au moins 49 lignes (un table système par exemple)
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

  5. #35
    invite0bbe92c0

    Re : algoloto

    Citation Envoyé par Médiat Voir le message
    La partie récursive est essentielle pour la requête RESUL, qui ne contient pas de connect by, et pour la requête LISTE
    Ma remarque était d'ordre générique sur les syntaxes spécifiques Oracle; rien d'autre.

  6. #36
    Médiat

    Re : algoloto

    Et la mienne pour aider boby26 à transposer pour MySQL
    Je suis Charlie.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse

Page 2 sur 2 PremièrePremière 2