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 :

requete SQL avec sous requete qui ne fonctionne pas


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut requete SQL avec sous requete qui ne fonctionne pas
    Bonjour,

    Je cherche comment effectuer une requete me permettant de lier deux tables (jointure ?) et verifier 2 champs.

    J'ai deux tables identique (dans leurs formes) et j'aimerais faire une jointure sur la table afin de verifier les différences.

    J'ai une clé primaire double sur la première table et aucune sur la seconde.

    J'essaie de faire une incrémentation d'un champ lorsque les valeurs sont différentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1 
    SET compte = compte + 1
    WHERE valeur1 <> ( SELECT t2.valeur1 FROM table1 t1, table2 t2 WHERE t1.clé1 = t2.champcorrespondantclé1 AND t1.clé2 = t2.champcorrespondantclé2)
    Mais SQL me dit qu'il y a plusieurs résultats dans ma sous requêtes. Pouvez vous m'aider svp ?

    Merci d'avance

  2. #2
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par skyarnangel Voir le message
    J'ai une clé primaire double sur la première table et aucune sur la seconde.
    J'essaie de faire une incrémentation d'un champ lorsque les valeurs sont différentes.
    ...
    Mais SQL me dit qu'il y a plusieurs résultats dans ma sous requêtes. Pouvez vous m'aider svp ?Merci d'avance
    Puisque tu n'as pas de clé sur ta 2ème table, il doit y avoir quelquefois plusieurs lignes pour une même valeur de clé de la 1ère table. Du coup, ta sous-requête te renvoie plusieurs valeurs, et la comparaison avec valeur1 échoue.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Merci,

    J'ai ajouter un clé primaire sur mes champs, et je suis donc certains maintenant de ne plus avoir de doublons. Le problème viens d'ailleur.

  4. #4
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Et comme ceci (en ne "redéclarant" pas Table1 dans la sous-requête) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1 
    SET compte = compte + 1
    WHERE valeur1 <> ( SELECT t2.valeur1 FROM table2 t2 WHERE clé1 = t2.champcorrespondantclé1 AND clé2 = t2.champcorrespondantclé2)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Merci pour vos réponses

    Malheureusement j'y avais déja pensé et j'ai mal écrit ma question sur ce point. En fait les tables sont identique dans le noms des colones et du coup il y a conflit pour SQL si je ne précise pas la table il ne sais pas de quel colone je parle (table 1? ou table2 ?)

  6. #6
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 915
    Points
    79 915
    Par défaut
    Bonjour,

    La question est réglée alors ? Vous nous dites vous même la réponse:

    Citation Envoyé par skyarnangel Voir le message
    il y a conflit pour SQL si je ne précise pas la table
    Préfixez tous les champs par leur "nomTable." (ou leur alias si il y en a un).

  7. #7
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    A mon avis, le problème est qu'en redéclarant table1 sous l'alias t1, tu ouvres un nouveau curseur sur table1, qui n'est pas lié avec le curseur ouvert pour l'update. Si tu penses qu'il est indispensable de préfixer tes champ, préfixe-les par table1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1 
    SET compte = compte + 1
    WHERE valeur1 <> ( SELECT t2.valeur1 FROM table2 t2 WHERE table1.clé1 = t2.champcorrespondantclé1 AND table1.clé2 = t2.champcorrespondantclé2)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Super, ca fonctionne

    Je ne savais pas qu'on ne devais pas déclarer une deuxième fois. Je ne suis pas si nul que ca alors

    Merci

  9. #9
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par skyarnangel Voir le message
    Je ne savais pas qu'on ne devais pas déclarer une deuxième fois.
    Il n'est pas interdit de déclarer deux fois, sous deux alias différents, mais alors on "ouvre" en quelque sorte deux fois la même table de manière indépendante, ce qui est quelquefois très utile, pour faire ce qu'on appelle une auto-jointure. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T1.ENFANT, T2.PERE FROM MATABLE T1 JOIN MATABLE T2 
    ON T2.ENFANT = T1.PERE
    peut renvoyer le grand-père paternel d'une personne.

    Mais c'est une autre histoire

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

Discussions similaires

  1. [Toutes versions] Requete UPDATE avec sous-requete imbriquée
    Par LVELVE dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 09/06/2020, 20h24
  2. optimisé une requete SQl avec une requete imbriqués
    Par fabien14 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2009, 11h01
  3. [SQL - Oracle 9i] Requete Sql avec filtre sur critere
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 3
    Dernier message: 05/12/2007, 09h45
  4. Requete Update avec sous requete et jointure
    Par javaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/05/2007, 12h03
  5. Requete Update avec sous requete
    Par joziel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 28/08/2006, 16h15

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