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

Requêtes et SQL. Discussion :

Requete update : Critère double de mise à jour


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut Requete update : Critère double de mise à jour
    Bonjour,

    J'essaye de mettre en place une requête update sur ma base de données.
    On ne peut pas faire des JOINs dans une requête update. J'ai donc utilisé WHERE ... IN (SELECT ... FROM ...)

    Le problème est que j'ai deux critères pour mon where.
    Or faire WHERE ... IN (SELECT ... FROM ...) AND ... IN (SELECT ... FROM ...) ne fonctionne pas car :
    Par exemple :
    J'ai une colonne avec CritèreA ou CritèreB et une colonne avec ValeurA ou ValeurB
    Si je veux mettre à jour (CritèreA, ValeurB) alors que dans mon IN (SELECT ... FROM ...) il y a les deux valeurs A et B. Alors mes lignes (CritèreA, ValeurB) et (CritèreA, ValeurA) sont mises à jour ...
    Je ne vois pas comment faire un WHERE ... IN avec un couple de données


    Pourriez-vous m'aider svp ?

    Cdt

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 010
    Points : 24 578
    Points
    24 578
    Par défaut
    Bonjour,

    On ne peut pas faire des JOINs dans une requête update.
    Je ne suis pas d'accord.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Bonjour,

    Dans Access quand j'essaye de faire un UPDATE sur une table à partir d'un INNER JOIN avec une requête, access me répond que "l'opération doit utiliser une requete qui peut être mise à jour"
    Je suis d'accord que sous SQL cela devrait fonctionner.

    Cdt

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    En fait j'ai fait un INNER JOIN dans mon IN (SELECT ... FROM ... ) et cela a l'air de fonctionner

    Merci bien

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Non j'ai toujours le même problème et "apparemment" je ne peux pas faire d'inner join avec une requete dans un update ...

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 736
    Points : 14 758
    Points
    14 758
    Par défaut
    Bonjour,
    Non j'ai toujours le même problème et "apparemment" je ne peux pas faire d'inner join avec une requete dans un update ...
    je suis en partie d'accord avec marot_r : inner join n'empêche pas la mise à jour, c'est vrai, sauf si elle est mal utilisée : par exemple, avec une requête de regroupement c'est impossible , également, quand une des tables utilisées dans la jointure n'a pas de clé. Donc, le mieux est de poster ton code que l'on essaie de regarder ce qui ne va pas.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    En premier voilà l'explication de ce que je veux faire :
    J'ai deux tables BASE et FBL.
    Dans chacune des tables on retrouve un numéro d'identifiant NDD, une Affaire et un montant.
    Je dois comparer les deux tables et faire ressortir les données identiques dans chacune des tables en faisant un UPDATE dans une colonne de BASE : DETECTION.
    Le problème est que dans FBL, il peut y avoir plusieurs lignes avec des NDD identiques mais différents montants. Je fais donc une requête appelé REQUETE1 : SELECT NDD, Affaire, Sum(montant) FROM FBL GROUP BY NDD, Affaire
    J'effectue alors une requete UPDATE pour mettre à jour les données identiques.

    Première solution essayée : je fais un UPDATE BASE INNER JOIN REQUETE1 ON (BASE.NDD = REQUETE1.NDD) AND (BASE.Affaire = REQUETE1.Affaire) SET BASE.DETECTION = "OK"
    Cela me renvoie que je ne peux pas "l'opération doit utiliser une requete qui peut être mise à jour"
    Je comprends pq car il y a une agrégation mais je ne vois pas comment faire...

    Autre solution : je fais un UPDATE BASE INNER JOIN REQUETE1 SET BASE.DETECTION = "OK" WHERE BASE.NDD IN (SELECT NDD FROM REQUETE1 INNER JOIN BASE ON REQUETE1.Affaire=BASE.Affaire )
    Mais cela ne peut pas fonctionner car certains NDDs peuvent être dans plusieurs affaires et donc le UPDATE agit sur tous les NDDs même où il ne devrait pas y avoir de "Ok"

    Merci beaucoup de m'aider.

    Cdt.

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 736
    Points : 14 758
    Points
    14 758
    Par défaut
    Bonsoir,
    la solution est peut-être de créer une table temporaire à partir de ta requête de regroupement que tu utilisera ensuite pour mettre à jour les enregistrements concernés.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Bonsoir

    Que veux tu dire par table temporaire ? avec un code vba ?
    Si c'est cela, ça peut marcher même si j'aurais aimer savoir le faire juste avec des requetes ^^
    J'essayerai demain merci de ta réponse

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 736
    Points : 14 758
    Points
    14 758
    Par défaut
    pas besoin de vba, depuis l'interface de création de requêtes, il suffit juste de changer le type de requête sélection en création de table et de préciser le nom de la table à créer.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Ah ouai je savais pas !!! Parfait je vais essayer demain !
    Merci !

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    Nickel ça a parfaitement marché!
    J'ai trouvé un site parlant d'une méthode sans passer par une création de table http://www.dbnewz.com/2010/12/17/upd...la-meme-table/ mais je n'ai pas bien compris ^^

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 736
    Points : 14 758
    Points
    14 758
    Par défaut
    Bonjour,
    ton lien concerne Oracle et MySQL.
    Le fait de ne pas pouvoir utiliser une sous-requête de regroupement dans un requête de mise à jour est une limitation propre à l'environnement d'Access, alors que cela est possible dans Oracle ou MySQL.
    Même dans ce cas tout simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update table2 set cumul =(select sum([montant]) from table1);
    elle affiche le message d'erreur. Il faut faire avec.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 93
    Points : 51
    Points
    51
    Par défaut
    D'où une des raisons pour lesquelles je me forme en pyhton my sql
    Merci !!!

  15. #15
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 736
    Points : 14 758
    Points
    14 758
    Par défaut
    il existe quand même un moyen d'utiliser le regroupement avec les requêtes update avec les fonctions de domaine (Dlookup, Dfirst, Dmax ...) mais pas adapté dans le cas de comparaison complexe de données entre tables.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. Windows update recherche éternellement des mises à jour
    Par Invité dans le forum Windows 7
    Réponses: 40
    Dernier message: 20/05/2016, 22h34
  2. [2014] Relation double avec mise à jour et suppression en cascade
    Par ypelissier dans le forum Développement
    Réponses: 4
    Dernier message: 19/02/2015, 09h43
  3. Sql requete Update ne mets pas a jour
    Par Namson dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/04/2009, 14h07
  4. Réponses: 11
    Dernier message: 04/04/2008, 15h09
  5. Réponses: 7
    Dernier message: 27/12/2006, 17h54

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