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

SQL Oracle Discussion :

Union de requêtes et indicateur [11gR1]


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut Union de requêtes et indicateur
    Bonjour tout le monde,

    Je cherche à faire un truc un peu bizarre.
    Basiquement j'ai une table avec les colonnes " ID, Ressource1, Ressource2"

    Je cherche à récupérer une vue de la forme:
    ID Ressource1
    ID Ressource2
    ...
    et ce pour chaque ID de ma table (Sachant que les champs de ressources peuvent être nulls). J'ai donc fait un truc dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select ID, R.Ressource from MaTable, MatableRessource R where R.Ressource=Ressource1 and Ressource1 is not null
    Union
    Select ID, R.Ressource from MaTable, MatableRessource R where R.Ressource=Ressource2 and Ressource2 is not null
    ça marche bien sauf que dans mon traitement suivant je voudrais savoir si ma ligne de résultat correspond à la première ou la deuxième requête. Donc avoir un champ avec "1" ou "2" par exemple.
    C'est surement pas si compliqué que ça mais je bloque

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 106
    Points : 28 394
    Points
    28 394
    Par défaut
    Citation Envoyé par Towandaa Voir le message
    C'est surement pas si compliqué que ça mais je bloque
    En effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select 1 as source, ID, R.Ressource from MaTable, MatableRessource R where R.Ressource=Ressource1 and Ressource1 is not null
    Union
    Select 2 as source, ID, R.Ressource from MaTable, MatableRessource R where R.Ressource=Ressource2 and Ressource2 is not null
    Edit : Et avec des jointures normalisées, c'est plus joli
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Select  1 as source
        ,   T.ID
        ,   R.Ressource 
    from    MaTable T
        inner join
            MatableRessource R 
            ON R.Ressource = T.Ressource1 
    where   T.Ressource1 is not null
    Union
    Select  2 as source
        ,   T.ID
        ,   R.Ressource 
    from    MaTable T
        inner join
            MatableRessource R 
            ON R.Ressource = T.Ressource2 
    where   T.Ressource2 is not null

  3. #3
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Ah comme prévu c'était tout con c'est le petit coup du "1 as source" qui me manquait !

    Merci!

    Le iner join apporte-t-il qqch à part la "jolitude" de la requête?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 106
    Points : 28 394
    Points
    28 394
    Par défaut
    L'utilisation de la forme normalisée des requêtes offre plusieurs avantages :
    - Elle permet de séparer les conditions de jointures des restrictions
    - On peut être certain de ne pas avoir oublié une condition de jointure si la requête fait appel à de nombreuses tables et ainsi éviter un produit cartésien
    - Il est aisé de transformer une jointure stricte en jointure externe
    - Avec des SGBD dont l'optimiseur est paresseux, les jointures sont bien mises en évidence pour lui simplifier le travail
    - Elle est conseillée depuis plus 20 ans (1992) par le comité de normalisation du langage SQL et prise en charge par la majorité des SGBDR

  5. #5
    Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 46
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    L'utilisation de la forme normalisée des requêtes offre plusieurs avantages :
    - Elle permet de séparer les conditions de jointures des restrictions
    - On peut être certain de ne pas avoir oublié une condition de jointure si la requête fait appel à de nombreuses tables et ainsi éviter un produit cartésien
    - Il est aisé de transformer une jointure stricte en jointure externe
    - Avec des SGBD dont l'optimiseur est paresseux, les jointures sont bien mises en évidence pour lui simplifier le travail
    - Elle est conseillée depuis plus 20 ans (1992) par le comité de normalisation du langage SQL et prise en charge par la majorité des SGBDR
    Ok merci je vais essayer de m'y efforcer dès à présent alors ^^

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    L'utilisation de la forme normalisée des requêtes offre plusieurs avantages :
    - Elle permet de séparer les conditions de jointures des restrictions
    - On peut être certain de ne pas avoir oublié une condition de jointure si la requête fait appel à de nombreuses tables et ainsi éviter un produit cartésien
    - Il est aisé de transformer une jointure stricte en jointure externe
    - Avec des SGBD dont l'optimiseur est paresseux, les jointures sont bien mises en évidence pour lui simplifier le travail
    - Elle est conseillée depuis plus 20 ans (1992) par le comité de normalisation du langage SQL et prise en charge par la majorité des SGBDR
    Je suis certain de l’avoir déjà dit sur ce forum mais vu l’aspect mythologique des jointures ANSI je pense qu’il est utile de le redire.

    Le fait est que Oracle transforme vos jolies requêtes ANSI à son sauce habituel et que ce sont ces requêtes transformées qu’il optimise par la suite. Donc le mantra disant que l’optimiseur est capable du meilleur en présence des requêtes ANSI est mythologique chez Oracle.

    Ces transformations ont été souvent source des bugs au moins jusqu’à la version 11g d’Oracle. De plus comme Jonathan Lewis l’avait mentionné sur son blog elles rendent plus difficile l’utilisation des astuces SQL (SQL Hints) dans certaines casses.

    Concernant les avantages de type « séparation des conditions des jointures » et « sécurisation de l’écriture » ces sont des avantages assez relatives. Rien n’empêche de séparer les conditions de jointure etc. dans une jointure classique et rien non plus n’empêche un semi-produit cartésien si l’utilisateur de la base, c’est-à-dire le développeur dans ce cas, a un niveau de maitrise du SQL assez bas.

    Cela ne veut pas dire que l’écriture ANSI est déconseillée avec Oracle, loin de ça. Choisissez ce que vous arrange mais fait un choix avisé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Union de requêtes Analyse Croisée
    Par Armagnak dans le forum Access
    Réponses: 8
    Dernier message: 12/07/2012, 15h31
  2. [Oracle 10g] Problème Union-sous requêtes-group by
    Par slobberbone dans le forum SQL
    Réponses: 2
    Dernier message: 17/09/2007, 18h16
  3. Somme de lignes d'une union de requête
    Par totoranky dans le forum Langage SQL
    Réponses: 5
    Dernier message: 10/07/2007, 10h22
  4. union des requêtes
    Par Smix007 dans le forum SQL
    Réponses: 2
    Dernier message: 20/06/2007, 16h18
  5. Opérateur UNION dans requête
    Par freya91 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 12/06/2006, 11h08

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