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 :

exprimer des sous requêtes


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Par défaut exprimer des sous requêtes
    Bonjour,

    je travaille sous Oracle 9i

    Voici la structure de mes deux tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    VueSejourDPI(ID (NuméroAuto),PAT_ExternalId (Texte),Date_Examen (date/heure),NISEJOUR (Texte))
    
    Visite(VISTE_Id (NuméroAuto),PAT_ExternelId (Texte),DPI_NISEJOUR (Texte),Jaeger_VISITE_Id (Texte),DATEVISITE (date/heure))
    je souhaite inserer dans la table Visite les données de la table VueSejourDPI qui n'existent pas déjà dans la table Visite. sachant que le champ Jaeger_VISITE_Id restera vide.
    c'est à dire je veux selectionner toutes les visites de la base VueSejourDPI pour lequelle soit les PAT_ExternelId n'existe pas dans la table visite ou bien il existe mais les dates DATEVISITE et Date_Examen sont differents.

    je n'ai pas réussi à formuler ma requête et c'est pour cette raison je demande votre aide.

    je vous remercie d'avance.

  2. #2
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Par défaut
    Bonjour,
    Je pense que je m'y prendrais de la façon suivante
    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
    INSERT INTO Visite (
    PAT_ExternelId ,
    DPI_NISEJOUR,
    Jaeger_VISITE_Id,
    DATEVISITE
    )
    SELECT 
    A.PAT_ExternalId,
    A.NISEJOUR,
    NULL,
    A.Date_Examen
    FROM VueSejourDPI A
    WHERE NOT EXISTS (SELECT 'X'
    			FROM Visite B
    			WHERE A.PAT_ExternalId = B.PAT_ExternalId)
    UNION
    SELECT 
    A.PAT_ExternalId,
    A.NISEJOUR,
    NULL,
    A.Date_Examen
    FROM Visite B, VueSejourDPI A
    WHERE  A.PAT_ExternalId = B.PAT_ExternalId
    AND A.ate_Examen <> B.DATEVISITE
    On pourrait aussi remplacer l'UNION des deux SELECT par une seconde clause WHERE
    CLAUSE 1
    OR CLAUSE 2
    mais en terme d'optimisation le recours à UNION est souvent rentable.

    J'espère que cela t'aidera
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 568
    Par défaut
    Merci beaucoup pour ton aide, effectivement c'est ce que j'ai fais
    Comme je dois inserer mes données Oracle dans une pseudo base Access, j'ai mis ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO Visite ( PAT_ExternelId, DATEVISITE, DPI_NISEJOUR )
    SELECT DISTINCT VueSejourDPI.PAT_ExternalId, VueSejourDPI.Date_Examen, 
    VueSejourDPI.NISEJOUR
    FROM VueSejourDPI, Visite
    WHERE (((Exists (select 1 from Visite v1 where v1.PAT_ExternelId = VueSejourDPI.PAT_ExternalId))=False)) 
    OR (((Exists (select 1 from Visite v1 where v1.PAT_ExternelId = VueSejourDPI.PAT_ExternalId and dateDiff("d",v1.DateVisite,VueSejourDPI.Date_Examen) = 0))=False));
    et ça marche.
    merci encore

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

Discussions similaires

  1. Probleme de tri avec des sous requêtes
    Par kamnouz dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/04/2010, 10h03
  2. A propos des sous-requêtes
    Par vincent-v dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/08/2009, 18h40
  3. [AC-2003] Création d'index dans des sous-requêtes
    Par buzz73 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 06/08/2009, 14h33
  4. Afficher des sous-requêtes dans une requête
    Par ZashOne dans le forum Sql*Plus
    Réponses: 6
    Dernier message: 16/04/2008, 10h07
  5. Problème avec des sous requêtes
    Par nicocolt dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/10/2007, 15h19

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