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 :

à quoi sert ce +


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 72
    Par défaut à quoi sert ce +
    Bonjour,

    je viens de tomber sur une requête qu'une ancienne collègue à faite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     SELECT v.ctry, v.vendorid, v.vendor, company, a.addressid, street1, street2, city
     FROM vendor v, ctry c, address a
     WHERE 1=1 
         AND v.ctry = c.ctry
         AND v.vendorid = a.vendorid
         AND v.vendorid || '-' || +addressid IN
         (  
                SELECT vendorid || '-' || MAX (addressid) maxaddress
                FROM address
                GROUP BY vendorid
        );
    je comprend pas à quoi peut servir le "+" en rouge.

    je connais la notation (+) qui sert à faire un join , donc j'aurais compris qqch du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
         AND v.vendorid = a.vendorid (+)
    ...

    mais là je vois pas.


    Une idée ?

    merci d avance

    L.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Il s'agit de la façon de gérer les jointures externe.
    Equivalent à un OUTER JOIN

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Si la requête est vraiment écrite comme ça, je pensais qu'elle ne compilerai pas, mais il semble que le + soit considéré comme le signe du nombre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> with t as (
    select 1 as c1, 2 as c2 from dual
    )
    select c1 ||'-'|| +c2 from t;
     
    C1|
    ---
    1-2
     
    SQL>
    Dans le code présenté, il semble bien inutile puisque dans le IN le + n'est pas utilisé associé au MAX.

    (+) (avec parenthèse) est une syntaxe oracle pour des jointures externes, comme l'a rappelé MCM.

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Houla, j'avais mal lu la question.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    A mon avis, l'unique intérêt de la chose est que, si addressid n'est pas un nombre valide, la requête tombera en erreur.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2009
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2009
    Messages : 72
    Par défaut
    merci McM et skuatamad il est toujours bon en effet de la rappeler ... le (+) est un join ah mais je suis bete je l'avais écrit dans mon post.

    et oui la requête est vraiment écrite comme ca et oui elle compile très bien . c'est le script d'une view.

    merci pour vos réponse tout de meme

  7. #7
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Citation Envoyé par al1_24 Voir le message
    A mon avis, l'unique intérêt de la chose est que, si addressid n'est pas un nombre valide, la requête tombera en erreur.
    Ca passe avec un varchar:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SQL> select +dummy from dual;
     
     
    D
    -
    X
    Je pense que ce + est complètement inutile.

    Ce SQL est très mal écrit. Pourquoi faire une concaténation avec '-' ? il suffit de faire: AND (v.vendorid,addressid) IN ( SELECT vendorid,MAX (addressid) maxaddress)

    Et cette sous-requête est elle aussi inutile, et couteuse. Il faut utiliser la fonction analytique max(addressid)over(partition by v.vendorid)

    Cordialement,
    Franck

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

Discussions similaires

  1. A quoi sert XML-Schema
    Par Community Management dans le forum Valider
    Réponses: 20
    Dernier message: 26/01/2009, 09h52
  2. à quoi sert le délestage?
    Par r0d dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 5
    Dernier message: 06/10/2004, 14h34
  3. a quoi sert le schema dans postgres ??
    Par champion dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 13/09/2004, 10h25
  4. [info] A quoi sert ImageObserver ?
    Par FrigoAcide dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 22/03/2004, 17h20

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