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

MySQL Discussion :

Copie de base à base avec condition sur une aggregation


Sujet :

MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 85
    Points : 43
    Points
    43
    Par défaut Copie de base à base avec condition sur une aggregation
    Bonjour,

    J'aimerai effectuer une copie d'une table à partir d'une base source sur une base destination mais portant sur une condition count(*) afin d'élimer des cas de doublons de ma table source du fait que la table destination contient moins de clefs primaires.

    La syntaxe est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO baseDestination.table (champ1, champ2,champ3)
    SELECT champ1,champ2,champ3
    GROUP By champ1, champ2, champ3
    Ceci bien evidemment fonctionne mais dès que l'on veut inclure une condition sur un aggregat comme la fonction count, nous le nombre de colonne du SELECT n'est plus le même que le nombre de colonne de l'INSERT et bien sûr ceci ne fonctionne pas.

    Voici ce que je tente de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO baseDestination.table (champ1, champ2,champ3)
    SELECT champ1,champ2,champ3,count(*) AS CountDoublon
    GROUP BY champ1, champ2,champ3
    HAVING CountDoublon < 2
    Mais le fait de déclarer count(*) dans le SELECT ne m'autorise du coup pas l'INSERT. LE problème c'est que je ne peux pas m'en passer !

    J'ai même tenté de déclarer un champ constant dans l'INSERT histoire de faire correspondre le nombre de colonnes respectivement dans le SELECT et l'INSERT. Ca ferait un code du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO baseDestination.table (champ1, champ2,champ3,'')
    SELECT champ1,champ2,champ3,count(*) AS CountDoublon
    GROUP BY champ1, champ2,champ3
    HAVING CountDoublon < 2
    J'ai du mal à expliquer ce problème, j'espère qu'il pourra être compris par quelqu'un

    Merci d'avance !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2007
    Messages : 85
    Points : 43
    Points
    43
    Par défaut
    Bon, je me réponds à moi même.

    Il me semble que ça fonctionne en ne déclarant pas le count(*) dans le SELECT mais tout simplement en le plaçant directement dans la clause HAVING !
    Après je sais pas si ma requête est correcte du fait que j'ai encore quelques erreurs de contraintes malgré la suppression des champs dupliqués...

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/08/2011, 18h05
  2. [XL-2003] Somme conditionnelle avec condition sur une partie de cellule + RechercheV
    Par Benoit Schwob dans le forum Excel
    Réponses: 13
    Dernier message: 28/04/2011, 23h26
  3. Export d'une table avec condition sur une autre
    Par Hobbi1 dans le forum Import/Export
    Réponses: 2
    Dernier message: 25/03/2010, 14h35
  4. Réponses: 0
    Dernier message: 05/02/2008, 10h09
  5. Requete avec condition sur une partie de l'affichage
    Par dinver78 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2007, 09h19

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