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 :

[Mysql 3] Comparaison sur deux tables dans deux bases différentes


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut [Mysql 3] Comparaison sur deux tables dans deux bases différentes
    Bonjour à tous,
    J'aimerai réalisé une requete qui me permette de savoir si des données présentes dans une table d'une base sont présentes dans une table dans une autre base. Du coup j'ai fait une requete de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM base1.table1
    WHERE champ1 NOT IN (SELECT champ2 FROM base2.table2);
    Mais ca ne marche pas.
    Quelqu'un aurait-il une idée ?
    Merci pour votre aide

    Par contre je viens de remarqué que mes deux champs ne sont pas du meme type. Cela pose t'il un probleme ?

  2. #2
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Bon j'avance tout seul vu que personne ne veut m'aider . Bon apparement la différence de type ne dérange pas. j'ai essayé avec une autre requete ca marche. Par contre je viens d'apprendre que la version de mon Mysql ne prend pas en compte les requetes imbriquées. Du coup ma requete du début tombe à l'eau. J'ai essayé le DIFF mais il est pas reconnu non plus. Comment pourrais-je faire alors ? J'ai besoin d'aide s'il vous plait.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 855
    Points : 52 996
    Points
    52 996
    Billets dans le blog
    6
    Par défaut
    Par contre je viens de remarqué que mes deux champs ne sont pas du meme type. Cela pose t'il un probleme ?
    OUI !!!

    Deux carottes sont ils deux navets ???

    Donc transtyper les colonnes avec CAST.

    A +

  4. #4
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Je suis pas sur que toi. Car j'ai fais une jointure sur deux champs de types différents et ça à marché. En fait le problème c'est la structure de la requête car il me détecte une erreur dans le SQL.

  5. #5
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    une erreur ? peux tu etre plus précis?

    Si cela ne supporte pas les requetes imbriquées, regarde la FAQ MySQL pour voir comment t'en sortir

    bon courage

    Michel

  6. #6
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    En consultant le site de Mysql, j'ai découvert que les requetes imbriqué ne sont supportés qu'a partir de la version 4 de Mysql et moi je suis en version 3. Donc voila pourquoi ma requete imbriquée ne fonctionne pas. Alors quelqu'un sait il comment faire une comparaison entre deux tables sans passer par une requete imbriqué ?

  7. #7
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    comme dit plus haut, c'est écrit dans la FAQ MySQL

  8. #8
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    J'ai trouvé comment faire mais apparement ma base de données est trop importante car quand je lance la requete, la requete tourne des heures mais rien ne sort et la requete continue de tourner. Je l'ai laisser plusieurs heures mais aucun résultats et elle continue de tourner.

  9. #9
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    tu peux mettre ta requete?
    Quelle taille ta base?

  10. #10
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Voila la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT base1.table1.* 
    FROM base1.table1 LEFT JOIN base2.table2 ON base1.table1.id1=base2.table2.id2 WHERE base2.table2.id2 IS NULL;
    Et il faut savoir que les deux tables sur lesquelles je travaille contiennent chacunes environ 2 à 3 millions d'enregistrement.
    Voila les infos, merci pour le coup de main.

  11. #11
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Champ ou ligne ?
    Est-ce uniquement le critère base2.table2.id2 qui peut avoir la valeur nul ou bien manque-t-il toute la ligne (ou enregistrement) correspondant à ce critère ?

  12. #12
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    En fait le but de ma requete est de sélectionner toute les infos de table1 dont id1 n'est pas dans table2. Mais malheureusement mysql 3 ne connait pas les requetes imbriquées et sur le de mysql ils disent de faire comme ca. Apparement avec LEFT JOIN, cela regroupe les données des deux tables entre elles et met a NULL le champ id2 si il n'est pas égal à id1. Donc c'est bien sur la valeur NULL de id2 que je travaille car d'autes champs peuvent être NULL mais cela n'a aucun rapport. J'espère avoir été assez clair quoique j'ai des doutes.

    j'ai fait un COUNT(*) sur les deux tables. Dans table2, j'ai 2181001 lignes et dans table2 j'ai 1988533 lignes. Ca fait trop ou ca peut marcher quand meme ?

  13. #13
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut Exception join
    C'est donc, si j'ai bien compris, le coup classique où on veut savoir quelles sont les lignes qui sont dans une table et pas dans une autre selon un ou plusieurs critères de concordance.

    Alors, si c'est supporté, essaie une jointure d'exception :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT base1.table1.* 
    FROM base1.table1 EXCEPTION JOIN base2.table2 ON base1.table1.id1=base2.table2.id2
    Ce qui se traduit en clair par :

    Je dresse la liste des toutes les lignes qui sont présentes en table1 et absentes en table2 selon les critères de rapprochement id1 = id2.

  14. #14
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Merci de l'astuce mais apparement ce n'est pas supporté pas Mysql. Personne n'aurai une autre idée ?

  15. #15
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Bon apparement ca bloquerait du fait que les deux champs ne sont pas du même type. Du coup je suis en train d'en modifier une, je vous tiens au courant...

Discussions similaires

  1. Enregister des données sur deux tables dans une base Access
    Par aziz-be dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 23/09/2012, 11h46
  2. Réponses: 8
    Dernier message: 17/07/2012, 14h43
  3. Somme de deux colonnes dans deux tables
    Par Madjid52 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/09/2010, 22h39
  4. Réponses: 2
    Dernier message: 10/04/2009, 14h34
  5. Lier deux champs dans deux tables ?
    Par Olivierc dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 23h13

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