IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[requète sql] Créer une vue ordonnée


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut [requète sql] Créer une vue ordonnée
    Bonjour,

    Existe-t-il un moyen qui reviendrait à créer une vue triée sur une table non triée, sachant qu'on ne peut pas créer une vue en utilisant order by ?


    Explication :
    Si je le pouvais, je ferai une requète du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select a, b, c from my_table order by a, b
    Seulement voila, je ne peux pas passer le "order by" dans mon code (en fait, je ne fais pas un select, mais utilise une méthode externe faisant ce select, méthode qui ne supporte pas le order by).

    Donc mon idée première était de créer une vue V de la table my_table, triée grâce à order by sur a et b, puis de faire le select sur cette vue.
    En faisant des recherches, je me suis apercu que cela n'était pas possible (snif).

    Connaissez vous une méthode qui me permettrait d'arriver au même résultat, c'est à dire quelque chose du type (attention, cette requète est très fausse) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view V1 as select * from my_table order by col1, col2
    Merci

    Pour info, le SGBD utilisé est Informix
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  2. #2
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    C'est possible, tu n'est pas loin de la solution . Voilà ce que je te propose, testé sous Oracle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE MaTable(
    Champ1 NUMBER (2),
    Champ2 NUMBER (2),
    Champ3 NUMBER (2));
     
    INSERT INTO MaTable VALUES (3, 1, 7);
    INSERT INTO MaTable VALUES (1, 2, 3);
    INSERT INTO MaTable VALUES (4, 6, 9);
    INSERT INTO MaTable VALUES (2, 8, 3);
     
    COMMIT;
    Sans Order By, le Select ma ramène ceci (arbitrairement trié par ordre d'insertion) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> SELECT Champ1, Champ2, Champ3
      2  FROM MaTable;
     
        CHAMP1     CHAMP2     CHAMP3
    ---------- ---------- ----------
             3          1          7
             1          2          3
             4          6          9
             2          8          3
    Tu peux donc bien faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> SELECT Champ1, Champ2, Champ3
      2    FROM (SELECT Champ1, Champ2, Champ3
      3            FROM MaTable)
      4  ORDER BY Champ1, Champ2, Champ3;
     
        CHAMP1     CHAMP2     CHAMP3
    ---------- ---------- ----------
             1          2          3
             2          8          3
             3          1          7
             4          6          9
    Si tu as besoin d'une clause WHERE dans le Select imbriqué, c'est tout à fait possible. Par contre, avec des volumes de données conséquents, tu risque des soucis niveau performances
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Merci pour la réponse, mais je me suis visiblement mal expliqué.

    En fait, je n'ai pas la possibilité d'utiliser la clause ORDER BY dans mes requètes (c'est à dire dans tout ce qui commence par SELECT).
    ma seule possibilité est de faire une requète "simplissime" : SELECT ... FROM ... WHERE ...
    rien de plus.

    C'est pour cela que je cherche un moyen détourné, et que j'avais pensé passser par une vue, que j'aurais construite en la triant.
    Ce qui donnerait un truc du genre (désolé pour le pseudo-code affreux qui suit, mais je ne suis pas bon en SQL) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW V1 as SELECT * from my_table ORDER BY champ1, champ2;
     
    SELECT * from V1 WHERE conditions
    Mais voila, on ne peut pas créer de vues en utilisant ORDER BY. Donc je cherche un moyen détourner de le faire quand même, si cela est possible.

    J'espère que ma demande est maintenant plus explicite, et qu'en plus quelqu'un saura y apporter une réponse.

    Merci à tous ceux qui ont eu le courage de me lire jusqu'ici dans tous les cas
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Citation Envoyé par gangsoleil
    Mais voila, on ne peut pas créer de vues en utilisant ORDER BY. Donc je cherche un moyen détourner de le faire quand même, si cela est possible.
    Je peux, mais je ne sais pas si c'est spécifique à Oracle :

    Toujours sur le même jeu de tests :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE VIEW V1 as 
    SELECT Champ1, Champ2, Champ3
      FROM (SELECT Champ1, Champ2, Champ3
              FROM MaTable)
    ORDER BY Champ1, Champ2, Champ3;
    J'obtiens bien le résultat escompté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select * from V1;
     
        CHAMP1     CHAMP2     CHAMP3
    ---------- ---------- ----------
             1          2          3
             2          8          3
             3          1          7
             4          6          9
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

Discussions similaires

  1. requête imbriquée dans une vue SQL
    Par captainamerica75 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 29/05/2007, 14h39
  2. Réponses: 3
    Dernier message: 09/11/2006, 10h25
  3. Créer une vue avec du SQl dynamique
    Par gghonang2 dans le forum Oracle
    Réponses: 15
    Dernier message: 06/09/2006, 22h03
  4. [9iR2][PL/SQL] Comment créer une vue dans un package ?
    Par mainecoon dans le forum Oracle
    Réponses: 6
    Dernier message: 22/02/2006, 08h10
  5. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo