Pb Jointure - produit cartesien
Pierre81
-
R4f Messages postés 441 Statut Membre -
R4f Messages postés 441 Statut Membre -
Bonjour,
J'ai deux tables (assez grosses).
Dans la première, j'ai deux lignes avec une même valeur d'un champ (champ NB)
dans la deuxième, j'ai 12 lignes avec cette même valeur dans le même nom de champ.
Le script que j'étudie fait simplement une jointure Table1.NB = Table2.NB
je m'attend donc à trouver 24 lignes, cad le produit cartesien des deux.
Or seules 12 lignes sortent !
J'aimerai comprendre pourquoi le produit cartesien ne s'applique pas ?
On m'a dit que peut-être la requête s'arreterait dès qu'il trouve un NB sur la table 1 ??? mais ça m'étonne.
On m'a dit aussi que peut-être, comme d'autres champs sont communs entre les deux tables, il ferait une jointure "cachée" pour optimiser la requête ????
Bref, un expert saurait-il me répondre ?
Merci beaucoup !!!
J'ai deux tables (assez grosses).
Dans la première, j'ai deux lignes avec une même valeur d'un champ (champ NB)
dans la deuxième, j'ai 12 lignes avec cette même valeur dans le même nom de champ.
Le script que j'étudie fait simplement une jointure Table1.NB = Table2.NB
je m'attend donc à trouver 24 lignes, cad le produit cartesien des deux.
Or seules 12 lignes sortent !
J'aimerai comprendre pourquoi le produit cartesien ne s'applique pas ?
On m'a dit que peut-être la requête s'arreterait dès qu'il trouve un NB sur la table 1 ??? mais ça m'étonne.
On m'a dit aussi que peut-être, comme d'autres champs sont communs entre les deux tables, il ferait une jointure "cachée" pour optimiser la requête ????
Bref, un expert saurait-il me répondre ?
Merci beaucoup !!!
A voir également:
- Excel produit cartésien
- Clé de produit windows 10 - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
1 réponse
Salut Pierre81,
Ton cas est assez mal expliqué, donc je vais peut-être répondre à côté de la plaque...
Le produit cartésien est une notion ensembliste. Cf. : https://fr.wikipedia.org/wiki/Produit_cart%C3%A9sien#D.C3.A9finition
Si tu as 5 éléments dans un ensemble A et 6 dans un ensemble B, leur produit cartésien comprend 5 x 6 élements, soit 30.
Lorsqu'on fait une jointure, on parle symboliquement de partir de ce produit cartésien et de réduire les appariements (les couples d'éléments de A et de B) selon une contrainte d'égalité entre 2 champs.
L'exemple bateau est celui des employés et des services dans lesquels ils travaillent :
Si on veut faire la jointure des 2 tables, il sera assez naturel de faire correspondre le champ id_service de la table Employés avec le champ id de la table Services
En SQL relativement standard, cela donne
SELECT nom_employé, nom_service FROM Employés, Services WHERE id_service = id
ou plus proprement (avec jointure explicite)
SELECT nom_employé, nom_service FROM Employés INNER JOIN Services ON id_service = id
On appelle cela une jointure interne.
Le résultat est
Il y a donc 6 résultats.
Par contre le produit cartésien Employés x Services comporte 24 résultats (6 x 4).
Raph
Ton cas est assez mal expliqué, donc je vais peut-être répondre à côté de la plaque...
Le produit cartésien est une notion ensembliste. Cf. : https://fr.wikipedia.org/wiki/Produit_cart%C3%A9sien#D.C3.A9finition
Si tu as 5 éléments dans un ensemble A et 6 dans un ensemble B, leur produit cartésien comprend 5 x 6 élements, soit 30.
Lorsqu'on fait une jointure, on parle symboliquement de partir de ce produit cartésien et de réduire les appariements (les couples d'éléments de A et de B) selon une contrainte d'égalité entre 2 champs.
L'exemple bateau est celui des employés et des services dans lesquels ils travaillent :
Employés (nom_employé, id_service) Jojo | 1 Lulu | 1 Gégé | 2 Toto | 3 Rara | 4 Coco | 4 Services (id, nom_service) 1 | Comptabilité 2 | Direction générale 3 | Achats 4 | Informatique
Si on veut faire la jointure des 2 tables, il sera assez naturel de faire correspondre le champ id_service de la table Employés avec le champ id de la table Services
En SQL relativement standard, cela donne
SELECT nom_employé, nom_service FROM Employés, Services WHERE id_service = id
ou plus proprement (avec jointure explicite)
SELECT nom_employé, nom_service FROM Employés INNER JOIN Services ON id_service = id
On appelle cela une jointure interne.
Le résultat est
Jojo | Comptabilité Lulu | Comptabilité Gégé | Direction générale Toto | Achats Rara | Informatique Coco | Informatique
Il y a donc 6 résultats.
Par contre le produit cartésien Employés x Services comporte 24 résultats (6 x 4).
Raph
Je vais essayer de mieux expliquer :
Dans une table T1, j'ai deux lignes avec le mm NB
dans la table T2, j'ai 12 lignes avec le mm NB
en faisant une requête avec la jointure T1.NB = T2.NB, combien de lignes dois-je obtenir ?
Je pensais devoir en obtenir 24, mais j'en obtiens 12. C'est là mon souci, sur le nombre de lignes rendues.
Merci d'avance.
Donne des exemples !
Je n'ai pas d'exemple précis à donner. les tables sont monstrueuses.
Mais tant pis. Merci beaucoup quand même.
De toute façon, c'est normal d'en obtenir que 12 et non pas 24. Car tu fis une jointure sur l'égalité de 2 champs (l'un dans une table, l'autre dans l'autre table) donc c'est normal d'avoir autant de résultats que la table 'maitresse' (dans mon exemple, c'est Employés) puisque à chaque employé ne correspond qu'un et un seul enregistrement de la table Services.
Dans mon exemple, si j'avais le double de résultats, cela voudrait dire que les employés sont dans 2 services, ce qui n'est pas le cas...
Raph