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 :

Problème requête jointure


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut Problème requête jointure
    Bonjour à tous,

    J'ai un petit soucis pour faire une requête.
    Voila mon problème.
    J'ai une table TbLien(id,codefamille,codeproduit,....)
    Elle est liée a la table TbFamille(CodeFamille,....) et à TbProduit(CodeProduit,....)
    Je veux faire des insertion dans ma table TbLien, en y insérant des données des tables tbFamille et TbProduit. Le soucis c'est que j'arrie a bien faire ma requête d'insertion mais il me manque une partie ou je teste les lignes qui sont déjà dans TbLien. En effet j'ai déjà pas mal de lignes dans cette table et je ne veux pas créer de doublons.
    Je ne vois pas comment faire ma restriction.

    J'espèrea voir été claire et que vous pourrez m'aidez.
    Merci d'avance.

    Isa

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Si tu es sous Oracle tu peux faire des Triggers

  3. #3
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Le soucis c'est que je ne sais pas trop comment ca marche.
    Je ne peux pas arriver a le faire avec des jointures ou un ???

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    J'ai des idées :
    - en définissant un clé primaire sur (codefamille,codeproduit) de tbLien et dans ce cas ton id ne sert probablement a rien.
    - en faisant un trigger si tu es sous Oracle : c'est une procédure qui se déclenche automatiquement sur certains évènements comme l'insertion de ligne dans la table TbLien dans ton cas.
    - en déclarant une vue qui aurait elle-même des contraintes et en se servant de cette vue.
    - en déclanchant toi-même une procédure ou fonction pour faire l'insertion ou simplement pour vérifier si oui ou non la ligne existe déjà.
    - etc...

    Tu es sous quel SGBD ?

  5. #5
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Oracle mais ca ne fait que 2 jours que je l'utilise donc je suis un peu perdue. En plus je n'ai pas le droit de toucher la base de donnée. C'est la base d'une appli et je veux juste faire une requête d'insertion pour ne pas avoir a faire plus de 10000 lignes à la main dans l'application.

    Au départ je pensais juste faire une requête d'exclusion mais je n'arrive pas à la faire...

  6. #6
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Points : 960
    Points
    960
    Par défaut
    Il me semble que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    insert into tblien(id,codefamille,codeproduit)
    select slien.nextval,f.codefamille, p.codeproduit
    from TbFamille f, TbProduit P
    Where ...(parite manquante pour savoir exactement ou se trouve le lien entre famille et produit)
    and (f.codefamille, p.codeproduit) not in (select codefamille,codeproduit from tblien)
    Le problème est que cette table TbLien me semble être la table qui joint les produits aux familles de produit. Ainsi, pour faire des insertions correctes, il faut bien insérer les ensembles correctement(c'est pour ça qu'il te faudra remplacer les ... impérativement).
    La SNCF est mon ami
    blog PARIS-GRANVILLE
    Inscription au panel IPSOS (possibilité d'avoir des bons d'achats)

  7. #7
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Dans un fichier que tu appeles par exemple Regles.sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE TRIGGER trig_TbLien
    BEFORE INSERT OR UPDATE
    ON TbLien
    FOR EACH ROW
    DECLARE
    	TOT	 INT;
    BEGIN
    	select count(*) into tot from TbLien where codefamille=:new.codefamille and codeproduit=:new.codeproduit;
    	if (TOT!=0)
    	then
    		Raise_application_error(-20002,'Cette ligne existe déjà');
    	end if;
    END;
    /
    Ensuite sous oracle tu fais fichier -> ouvrir -> Regle.sql

    Tu tapes la ligne de commande

  8. #8
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    OK je vais donner un schéma un peu plus proche de la réalité.

    TbLiens(TL_NO_PK, TL_TR_NO#, TL_TP_CODE#, TL_DTEDEB, TL_DTEFIN, MAJ_ID, MAJ_DT);

    TbRisque(TR_NO_PK, TR_TO_CODE#, TR_LIB, MAJ_DTE, MAJ_ID);

    TbProduit(TP_CODE_PK, TP_TC_NO#,TP_LIB, MAJ_DTE, MAJ_ID);

    TbContrat(TC_NO_PK, TC_TO_CODE#, TC_LIB, MAJ_ID, MAJ_DTE);

    TbOrigine(TO_CODE_PK, TO_LIB, MAJ_ID, MAJ_DTE);

    J'espère que c'est un peu plus clair comme ça.

    Ensuite j'ai le début de ma requête de sélection pour faire mon insertion et ça donne quelque chose dans se style :
    SELECT TR_NO_PK,TC_NO_PK
    FROM TBProduit TP
    INNER JOIN TBContrat TC ON TP.TP_PC_NO = TC.TC_NO_PK
    INNER JOIN TbOrigine TO ON TO.TO_CODE_PK = TC.TC_TO_CODE
    INNER JOIN TbRisque TR ON TR.TR_TO_CODE = TO.TO_CODE_PK;

    Ensuite je ne veux pas ce qui est dans :
    SELECT TL.TL_TR_CODE
    FROM TbLien TL
    INNER JOIN TbRisque TR ON TR.TR_CODE_PK = TL.TL_TR_CODE
    INNER JOIN TbProduit TP ON TP.TP_CODE_PK = TR.TR_TP_CODE;

  9. #9
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Je n'ai que la solution des trigger comme me dit BiMouXeTTe??

  10. #10
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Citation Envoyé par BiMouXeTTe
    Dans un fichier que tu appeles par exemple Regles.sql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE OR REPLACE TRIGGER trig_TbLien
    BEFORE INSERT OR UPDATE
    ON TbLien
    FOR EACH ROW
    DECLARE
    	TOT	 INT;
    BEGIN
    	select count(*) into tot from TbLien where codefamille=:new.codefamille and codeproduit=:new.codeproduit;
    	if (TOT!=0)
    	then
    		Raise_application_error(-20002,'Cette ligne existe déjà');
    	end if;
    END;
    /
    Ensuite sous oracle tu fais fichier -> ouvrir -> Regle.sql

    Tu tapes la ligne de commande
    J'ai une erreur
    SP2-0310: impossible d'ouvrir le fichier "Relgles.sql"
    Je ne vois pas comment cela doit marcher...

  11. #11
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ben si t'écris mal le nom de ton fichier lol ca me parait normal

  12. #12
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    Pardon j'ai bien mit le bon nom de fichier!!

  13. #13
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Tu as fait ca d'abord : fichier -> ouvrir -> Regle.sql ?

  14. #14
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    oui

    Je ne peux pas plutôt passer par une table temporaire que je supprime une fois ma table mise a jour?

  15. #15
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Ensuite soit tu fais @Regle.sql soit tu fais exec Regle.sql

    Ou encore une autre solution, c'est barbare mais pareil

    Tu fais un copier/coller du contenu du fichier dans Oracle.

  16. #16
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    OK j'ai le déclencheur qui est crée.
    Après je fais quoi?

  17. #17
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Quand tu inseres une ligne qui a deja un n-uplet avec codefamille et codeproduit qui y sont deja il te fera le message d'erreur
    Sinon il fera ta requete correctement.

    Tu n'as qu'a faire un test

  18. #18
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    j'ai encore un soucis avec ma clé primaire qui n'est pas auto increment...

  19. #19
    Membre régulier Avatar de Isa31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 267
    Points : 109
    Points
    109
    Par défaut
    J'ai les erreurs suivante:

    RA-04091: table TbLien en mutation, déclencheur/fonction ne peut la voir
    ORA-06512: à trig_TbLien ,ligne 4
    ORA-04088: erreur lors d'exécution du déclencheur TRIG_TbLien'

  20. #20
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    arg, remplace before par after pour voir !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Mysql5] Problème requête jointures externe
    Par sterix92 dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/12/2011, 14h03
  2. [Requête] Problème de jointure
    Par Oilcout dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/03/2007, 16h54
  3. [Requêtes SQL] Problème de jointure ?
    Par soso78 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 18/12/2006, 15h37
  4. problème requête à jointure multiple...
    Par Ricardo_Tubbs dans le forum Access
    Réponses: 6
    Dernier message: 09/02/2006, 16h45
  5. Réponses: 6
    Dernier message: 20/09/2004, 15h26

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