Précédent   Forum du club des développeurs et IT Pro > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/12/2012, 17h27   #1
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
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
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 17h30   #2
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 276
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Î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 276
Points : 13 555
Points : 13 555
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Regardez du côté des opérateurs EXCEPT et INTERSECT.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 17h44   #3
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
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
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 10h26   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 659
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
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 659
Points : 25 568
Points : 25 568
Envoyer un message via MSN à CinePhil
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.

Citation:
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
Citation:
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 23h25   #5
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
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
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 13h28   #6
soazig
Membre expérimenté
 
Inscription : octobre 2002
Messages : 671
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 671
Points : 571
Points : 571
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
soazig est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 15h22   #7
babouba
Membre à l'essai
 
Inscription : octobre 2006
Messages : 40
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 40
Points : 24
Points : 24
Merci bien vue
Sinon C'est une erreur de frappe de ma part
babouba est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h28.


 
 
 
 
Partenaires

Hébergement Web