Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Nouveau Membre du Club
    Inscrit en
    octobre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 40
    Points : 26
    Points
    26

    Par défaut Requêtes de comparaison

    Bonjour

    Je cherche à comparer les donnés de deux tables qui ne sont pas liées par les ids
    Pour afficher les donnés en communs , une parties en communs et pas présent sur l'autre table

    Exemple

    J'ai deux tables
    Personne

    nom
    prenom
    matricule
    numSecu
    statut
    ect...

    TicketMod

    nom
    prenom
    matricule
    numSecu
    statut
    ect..

    l'idée est de chercher sur la table TicketMod

    les données qui sont dans la table Personne et les Affichés
    Resultats attendus

    TicketModTrouvés
    c'est les donnés de la table Personne et que l'ont retrouve dans TicketModTrouvés

    TicketModSemiTrouvés

    C'est une partie des donnés de Personne par exemple nom, prenom avec un matricule ou un numSecu différent parceque y a eu des erreurs de saisies par exemples dans TicketModTrouvés

    Et Enfin TicketModPasTrouvés

    C'est les donnés qui sont TicketMod et que l'ont retrouve pas dans Personne

    En espérant que je me suis fais comprendre

  2. #2
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 871
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études en décisionnel
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : septembre 2008
    Messages : 6 871
    Points : 14 253
    Points
    14 253

    Par défaut

    Regardez du côté des opérateurs EXCEPT et INTERSECT.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    octobre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 40
    Points : 26
    Points
    26

    Par défaut

    Merci pour la réponse
    j'ai fais des choses comme ça mais ça retourne pas les résultats attendus
    Code :
    1
    2
    3
    4
    5
    6
     
    SELECT t  
    FROM TicketMod t, Personne p  
    WHERE t.nom LIKE p.prenom 
        and t.nom LIKE p.prenom 
        and t.matricule LIKE p.matricule

  4. #4
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 820
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 13 820
    Points : 24 813
    Points
    24 813

    Par défaut

    1) Utiliser LIKE sans caractère générique est équivalent à = alors autant utiliser = !

    2) On vous a proposé EXCEPT et INTERSECT et vous donnez une requête sans ces opérateurs !

    3) Vous pouvez aussi utiliser EXISTS et NOT EXISTS si votre SGBD ne connaît pas EXCEPT et INTERSECT.

    TicketModTrouvés
    c'est les donnés de la table Personne et que l'ont retrouve dans TicketModTrouvés
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT p.nom, p.prenom, p.matricule, p.numSecu, p.statut
    FROM Personne p
    WHERE EXISTS
    (
    	SELECT 1
    	FROM TicketMod t
    	WHERE t.nom = p.nom
    		AND t.prenom = p.nom
    		AND t.matricule = p.matricule
    		AND t.numSecu = p.numSecu
    		AND t.statut = p.statut
    )
    Le même résultat peut aussi être obtenu avec une jointure :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT p.nom, p.prenom, p.matricule, p.numSecu, p.statut
    FROM Personne p
    INNER JOIN TicketMod t
    	ON t.nom = p.nom
    	AND t.prenom = p.nom
    	AND t.matricule = p.matricule
    	AND t.numSecu = p.numSecu
    	AND t.statut = p.statut
    TicketModSemiTrouvés

    C'est une partie des donnés de Personne par exemple nom, prenom avec un matricule ou un numSecu différent parceque y a eu des erreurs de saisies par exemples dans TicketModTrouvés
    Même principe :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT p.nom, p.prenom, 
    	p.matricule AS matricule_personne,
    	t.matricule AS matricule_ticketMod,
    	p.numSecu AS numSecu_personne,
    	t.numSecu AS numSecu_TicketMod,
    	p.statut AS statut_personne,
    	t.statut AS statut_ticketMod
    FROM Personne p
    INNER JOIN TicketMod t
    	ON t.nom = p.nom
    	AND t.prenom = p.nom
    	AND
    	(
    		t.matricule <> p.matricule
    		OR t.numSecu <> p.numSecu
    		OR t.statut <> p.statut
    	)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau Membre du Club
    Inscrit en
    octobre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 40
    Points : 26
    Points
    26

    Par défaut

    Merci A tous

    C'est parce que j'utilise JPQL et il ne supporte pas EXCEPT et INTERSECT
    Sinon je dois le faire dans l'autre sens c'est à dire récupérer les donnés dans la table TicketMod , puisque on peut retrouver les même donnés de la même personne plusieurs fois pour montrer que c'est un TicketMod valide

    Encore Merci et bonne et heureuse année

  6. #6
    Membre chevronné
    Inscrit en
    octobre 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : octobre 2002
    Messages : 720
    Points : 687
    Points
    687

    Par défaut

    Bonjour,
    J'ai lu en diagonale le post, ce qui m'a frappé dans les requetes c'est :
    N'y aurait-il pas une coquille ? Serait-ce plutôt?
    A+
    Soazig

  7. #7
    Nouveau Membre du Club
    Inscrit en
    octobre 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : octobre 2006
    Messages : 40
    Points : 26
    Points
    26

    Par défaut

    Merci bien vue
    Sinon C'est une erreur de frappe de ma part

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •