Jointures [Oracle] - SQL/NoSQL - Programmation
Marsh Posté le 22-07-2008 à 10:56:54
Dans ce cas, il faudrait remplacer INNER JOIN par LEFT JOIN.
Voir http://forum.hardware.fr/hfr/Progr [...] 7208_1.htm
Par ailleurs, bien que INNER JOIN et LEFT JOIN soit standard, en pratique, on utilise assez peu cette syntaxe lourde et peu lisible. A la place, sous Oracle, on utilise
SELECT tmp4.name_prefix, |
ou pour remplacer les left join,
SELECT tmp4.name_prefix, |
(ou le (+) de l'autre côté, je ne me souviens jamais).
Marsh Posté le 22-07-2008 à 11:07:01
Mais justement on m'avait dit que c'était une ancienne façon de faire des jointures (norme de 1986 ou un truc comme ça).
Le problème c'est qu'en faisant des left join il va répéter les données d'une table dans une autre, chose que je ne veux pas.
J'ai pensé aux FULL OUTER JOIN, qu'en pensez-vous ?
Merci d'avance
Marsh Posté le 22-07-2008 à 11:23:13
écoute pas olivtill, c'est mieux les jointures explicites (et c'est un ancien anti-JOIN qui parle)
pour le full outer join, cela ne sert qu'à ramener des lignes dans tous les cas : que les données soit présentes des deux côté, que à droite ou que à gauche. c'est assez rare qu'on l'utilise (la preuve, très peu de sgbd le supportent)
par contre, explique ce que tu veux réellement (avec 3 lignes dans chacune de tes tables, montre ce que tu veux comme résultat) parceque là c'est pas clair
Marsh Posté le 22-07-2008 à 11:54:56
MagicBuzz a écrit : écoute pas olivtill, c'est mieux les jointures explicites (et c'est un ancien anti-JOIN qui parle) |
J'ai 4 tables tmp1, tmp2, tmp3 et tmp4. Il n'y a pas de relations entre elles au niveau MCD, juste que pour les données il y a un champs "pin_number" qui se retrouve dans les 4 tables (mais celles-ci n'ont pas le même nombre d'enregistrement".
Merci
Marsh Posté le 22-07-2008 à 15:27:18
c'est donc full outer join sur chacune des tables.
plus exactement, un full sur le résultat de la précédente jointure à chaque fois, en utilisant un alias.
Marsh Posté le 22-07-2008 à 16:03:25
merci,
est-ce que si je fais une clé étrangère sur plusieurs champs (4 champs en l'occurence), et que l'un d'eux est vie, est-ce que cela pose problème ?
Merci
Marsh Posté le 22-07-2008 à 17:05:50
pardon je voulais dire une clé primaire...au temps pour moi !!!
On ne peut pas mettre un des champs de la clé primaire sur plusieurs champs à null ?
Merci
Marsh Posté le 22-07-2008 à 19:42:37
une clé étrangère pointe forcément sur une clé primaire dans la table de référence.
et toutes les données doivent être présentes dans la table de référence.
dans ton cas, vu que c'est peut-être bien que oui peut-être bien que nom dans chaque table, c'est pas possible de faire des clés étrangères
Marsh Posté le 22-07-2008 à 10:04:29
Bonjour,
J'avais posté la semaine dernière un post concernant une requête avec des jointures, celle-ci semble marcher au niveau de la syntaxe, mais pas au niveau du nombre de résultats sortis. voici ma requête :
Dans ma table tmp_export_profils_portrait4 j'ai 22757 enregistrements,
Dans ma table tmp_export_profils_portrait3 j'ai 22691 enregistrements,
Dans ma table tmp_export_profils_portrait2 j'ai 22719 enregistrements,
Dans ma table tmp_export_profils_portrait j'ai 12109 enregistrements
et lorsque j'execute la requête dessus je n'ai que 15671 enregistrements qui sortent.
D'où ma question : Pourquoi je n'ai pas 22757 enregistrements ? (à savoir le nombre maximum d'enregistrements dans la table où il y a le plus d'enregistrements ?) C'est ce que j'aimerai faire justement, quitte à mettre des champs vides quand il n'y a pas de valeurs.
Merci
Elmoricq-edit : pas de titres tout en majuscules
Message édité par Elmoricq le 22-07-2008 à 10:16:53