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 sur deux table identiques donne des doublons


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Requete sur deux table identiques donne des doublons
    Bonjour,

    Je bute sur un probleme :
    Des vehicules sont a la vente sur deux sites distincts,
    elles sont dans deux tables identiques : vehicules et vehicules11

    Je dois extraire
    1- tous les vehicules
    2- un seul vehicule
    3- les cinq vehicules les plus chers.

    La requete 1 pose probleme, car elle retourne des tout en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * , YEAR( '1_ere_mise' ) AS ANNEE 
    FROM vehicules, vehicules11 
    WHERE 'categorie' != 'CYCLO' 
    order by 'marque' asc, 'modele' asc
    J'ai essayé beaucoup de choses sans parvenir à sortir le bon résultat.

    Quelle erreur ai'je fait ?

    Merci de votre aide.
    Mimi

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Peut-être avec :

    SELECT DISTINCT

    qui permet de ne retourner qu'un enregistrement dans un jeu d'enregistrements ou plusieurs enregistrements sont identiques.

    Bonne journée

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Tu fais un produit cartésien entre vehicule et vehicule11, je doute que ce soit ce que tu veux.
    Je pense que tu veux plutôt faire une UNION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT u.* , YEAR( u.1_ere_mise ) AS ANNEE
    FROM (
         select * from vehicules
         UNION
         select * from vehicules11
         ) u
    WHERE u.categorie != 'CYCLO'
    order by u.marque asc, u.modele asc
    Mais c'est plus propre de selectionner explicitement les colonnes des tables vehicules et vehicules11 (plutôt que *) au cas où une des tables évolue et pas l'autre.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Il n'y a pas de doublons dans les tables, tous les vehicules sont différents.

    vehicules contient 59 enregistrements,
    vehicules11 en contient 2.



    La requete de test est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM `vehicules`,`vehicules31` ORDER BY 'immat'
    Curieursment, elle retourne 118 enreg. , soit 59 doublons.
    Les réponses de vehicule11 n'y sont pas.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    merci skuatamad
    je chek et je reviens (
    vous etes trop rapides les gars...)

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par mimilamite Voir le message
    Curieursment, elle retourne 118 enreg. , soit 59 doublons.
    Oui ça s'appelle un produit cartésien, c'est le comportement normal (118= 2 * 59)
    http://sqlpro.developpez.com/cours/sqlaz/jointures/

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    skutamad,

    ta requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT u.* , YEAR( u.`1_ere_mise` ) AS ANNEE 
    FROM (
    SELECT * FROM vehicules
    UNION
    SELECT * FROM vehicules11
    ) u
    WHERE u.`categorie` != 'CYCLO'
    ORDER BY u.marque ASC, u.modele ASC
     
    retourne une erreur sql :
    #1064 - You have an error in your SQL syntax near '.1_ere_mise ) AS ANNEE FROM ( SELECT * FROM vehicules UNION SELECT * FROM ve' at line 1
    donc je corrige avec l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT u.* , YEAR( u.`1_ere_mise` ) AS ANNEE 
    FROM (
    SELECT * FROM vehicules
    UNION
    SELECT * FROM vehicules11
    ) u
    WHERE u.`categorie` != 'CYCLO'
    ORDER BY u.marque ASC, u.modele ASC
     
    re erreur SQL
    #1064 - You have an error in your SQL syntax near 'SELECT * FROM vehicules
    La, je sais plus... j'ai parcouru la page jointure, UNION JOIN marche pas

    j'ai MySQL - 3.23.58 -
    phpMyAdmin - 2.8.2.4
    Version du client MySQL: 4.1.18

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Bon désolé avec mysql 3 tu ne peux pas faire de sous requête.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    aie


    J'ai pas de prise sur l'hebergeur (netissime)

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Je ne me suis jamais servi de mysql3 donc je ne sais pas si il y a une astuce.
    A mon avis tu vas devoir faire 2 requêtes et unir les résultats côté applicatif avec des tableaux.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    quelle serait la version SQL qui pourrait le faire au minimum ?

    Merci,
    Mimi

  12. #12
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    c'est la 4.1 si je me souviens bien, mais à confirmer quand même notemment pour le UNION.

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

    Informations forums :
    Inscription : Novembre 2008
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    allei, on va faire simple.
    J'ai tout changé ma maniere de faire.
    Une seule table a présent.

    Merci à tous pour votre réactivité !

Discussions similaires

  1. Syntaxe requete sur deux tables
    Par mosquitout dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/03/2007, 20h31
  2. [SQL] requete sur deux tables
    Par yaka2 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/11/2006, 17h06
  3. Requete sur deux tables
    Par stefon dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 17/08/2006, 11h24
  4. requete sur deux tables
    Par rdams dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/04/2006, 14h42
  5. Requete sur deux tables
    Par ReaseT dans le forum ASP
    Réponses: 13
    Dernier message: 07/02/2005, 16h18

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