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 :

Récupérer une seule adresse parmi plusieurs pour un contact


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2012
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Récupérer une seule adresse parmi plusieurs pour un contact
    Bonjour à tous,

    J'ai une requête qui me permet de récupérer les tiers d'une application. Le soucis est que ça me retourne parfois, plusieurs fois le même tiers si il a plusieurs adresse.

    Je veux donc modifier la requête pour que ça récupère aléatoirement une adresse (dans un 1er temps) pour 1 tiers. Ainsi je n'aurai plus plusieurs fois le même tiers pour chaque adresse.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    select 
    'Numero' ||';'||
    'DateCreation' ||';'||
    'Civilite' ||';'||
    'Nom' ||';'||
    'Prenom' ||';'||
    'Telephone' ||';'||
    'Fax' ||';'||
    'AdresseEmail' ||';'||
    'Num'||'&'||'NomVoie' ||';'||
    'ComplementGeographique' ||';'||
    'BoitePostale' ||';'||
    'CodePostal' ||';'||
    'Localite' ||';'||
    'Pays' ||';'||
    'DateModification' from dual;
    select a.TIERS_CODE ||';'||
    to_char(a.TIERS_DATCRE,'DD/MM/RRRR')||';'||
    a.PP_QUALITE ||';'||
    a.TIERS_NOM ||';'||
    a.PP_PRENOM ||';'||
    b.ADRESS_TEL ||';'||
    b.ADRESS_FAX ||';'||
    b.ADRESS_EMAIL ||';'||
    b.ADRESS_VOIE ||';'||
    b.ADRESS_COMPLT ||';'||
    b.ADRESS_BP ||';'||
    b.ADRESS_CPOST ||';'||
    b.ADRESS_VILLE ||';'||
    b.ADRESS_PAYS ||';'||
    to_char(a.TIERS_DATMAJ,'DD/MM/RRRR')
    from APP_ADM.PUBLIC_EXPTIERS a, APP_ADM.PUBLIC_EXPADR b
    where a.tiers_code=b.TIERS_CODE
    and a.tiers_type =1
    group by a.TIERS_CODE, 
    to_char(a.TIERS_DATCRE,'DD/MM/RRRR'),
    a.PP_QUALITE ,
    a.TIERS_NOM ,
    a.PP_PRENOM,
    b.ADRESS_TEL,
    b.ADRESS_FAX,
    b.ADRESS_EMAIL,
    b.ADRESS_VOIE,
    b.ADRESS_COMPLT,
    b.ADRESS_BP,
    b.ADRESS_CPOST,
    b.ADRESS_VILLE,
    b.ADRESS_PAYS,
    to_char(a.TIERS_DATMAJ,'DD/MM/RRRR')
    order by a.TIERS_CODE ;
    Comment faudrait-il que je modifie la requête pour récupérer par exemple la première adresse trouvé ?

  2. #2
    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
    Cherchez sur ce forum First/Last dans leur version agrégée.

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    Il suffit d'ajouter fetch first n rows only
    n = 1 pour une seule ligne

    Par ailleurs
    - des alias un peu plus parlants que a, b ... sont recommandés, ca aide à la lecture
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from APP_ADM.PUBLIC_EXPTIERS TIERS, 
         APP_ADM.PUBLIC_EXPADR   ADR
    avec 2 tables ca passe à peu près, mais au delà c'est vite illisible

    - il est également fortement recommandé de distinguer les critères de jointures des critères de filtrage
    jointure dans un prédicat inner/(full) outer join... on
    filtrage dans le where

  4. #4
    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 escartefigue Voir le message
    ...
    - il est également fortement recommandé de distinguer...
    Par qui ?

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    Par ceux qui respectent les normes SQL, qui sont soucieux de la lisibilité du code et de la portabilité

  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
    En pratique la portabilité du code SQL reste un mythe et la lisibilité peut être assuré sans la norme ANSI.

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    même si la portabilité n'est pas à 100%, autant ne pas en rajouter et faire aussi propre que possible

    Concernant la séparation des critères de jointure de ceux de filtrage, non seulement c'est la norme, mais c'est plus clair et ça ne présente aucun inconvénient.
    Je ne vois donc aucune raison pour ne pas l'appliquer

    Il faut toujours penser à la maintenance, plus c'est clair, plus elle est facilitée

  8. #8
    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
    Avec quelques exceptions non significatives Oracle transforme votre requête ANSI à son sauce et cela a parfois des « effets des bords non souhaitées ».

    Les constats :
    • Il n’y a rien dans une requête ANSI qui vous empêche de mal écrire votre requête.
    • Il n’y rien dans une requête non ANSI qui vous empêche d’écrire la requête d’une manière qui réponde parfaitement à vos exigences.


    Après vous n’avez qu’utiliser ce que vous voulez. Mais ne prenez pas vos options pour des impératives.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    impératives ? il faut relire plus haut

    Pour le reste, si vous préférez écrire les requêtes en vrac, tant qu'il s'agit de vos développements privés, ca vous regarde, mais s'il s'agit de développements professionnels, c'est très différent.
    Ne pas comprendre que des prédicats de jointures et des prédicats de filtrage sont 2 choses différentes et qu'il convient donc de les séparer, me laisse sans voix

  10. #10
    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 escartefigue Voir le message
    impératives ? ...
    mais s'il s'agit de développements professionnels, c'est très différent.
    ...
    Cherchez sur Internet ce que les professionnels d'Oracle pensent sur ce sujet et revenez nous faire un retour.

    Ne pas comprendre que des prédicats de jointures et des prédicats de filtrage sont 2 choses différentes et qu'il convient donc de les séparer, me laisse sans voix
    Oui c'est bien ça, ils ont été inventés par la norme ANSI

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    Inventés ? il faut encore relire mes précédents posts, décidément, la lecture n'est pas votre fort ou la sincérité, ou les 2...

    Ce que disent les professionnels, en voici un florilège non exhaustif, je vous laisse chercher d'autres articles si cela vous amuse

    http://psoug.org/snippet/INNER-JOIN-...syntax_730.htm
    http://docs.oracle.com/javadb/10.8.3...sqlj35034.html
    http://www.techonthenet.com/oracle/joins.php
    http://www.orafaq.com/wiki/Inner_join
    http://www.aide-oracle.net/2009/04/l...plusieurs.html

  12. #12
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    C'est plus sioux que ça escartefigue.
    Les jointures existent sur Oracle DB bien avant la norme SQL.
    Oracle ne va pas mettre son moteur à la poubelle parce qu'une norme est sortie on est d'accord.

    Pour être compatible, l'éditeur a introduit la sémantique des jointures ANSI, mais lors de l'exécution elles sont réécrites en jointure non ANSI, à coup de "," et de (+), ce qu'on constate facilement en regardant n'importe quel plan d'exécution.

    Seulement, quelques bugs sont venus s’immiscer avec la fonctionnalité.
    Du coup de nombreux professionnels Oracle préfèrent ne pas utiliser les jointures ANSI.

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 689
    Points
    39 689
    Billets dans le blog
    9
    Par défaut
    Et ben c'est pas beau ca

  14. #14
    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

Discussions similaires

  1. mon imprimante n'imprime q'une seule copie parmi plusieurs
    Par pipipicontrole dans le forum Word
    Réponses: 1
    Dernier message: 19/05/2014, 17h33
  2. Réponses: 6
    Dernier message: 09/09/2010, 13h58
  3. Réponses: 3
    Dernier message: 06/02/2009, 15h22
  4. Récupérer une seule valeur parmi plusieurs
    Par geraldgg dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/05/2007, 10h26
  5. [Requêtes] Selectionner une seule date parmis plusieurs
    Par Herman dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 28/03/2007, 15h01

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