Problème avec les jointures - SQL/NoSQL - Programmation
Marsh Posté le 02-08-2007 à 22:30:19
ReplyMarsh Posté le 02-08-2007 à 23:53:51
Tu peux faire le outer join qui te met une ligne par contact et ensuite grouper par agence ou par entreprise si tu préfère. Le truc c'est de pas récupérer les champs de la table contact ((juste te servir de la table pour le outer join) pour qu'il puisse grouper par agence/entreprise
Marsh Posté le 03-08-2007 à 08:59:43
la piste de TheRom_s est bonne mais puisque tu as besoin des infos contact oublie la fin sur le group.
Deux petites questions complémentaires:
- tu veux remonter une ligne par agence ou une ligne par contact? Si c'est une ligne par agence comme doivent être présentés les contact
- quel SGBD?
Marsh Posté le 03-08-2007 à 10:15:54
TheRom_S a écrit : Tu peux faire le outer join qui te met une ligne par contact et ensuite grouper par agence ou par entreprise si tu préfère. Le truc c'est de pas récupérer les champs de la table contact ((juste te servir de la table pour le outer join) pour qu'il puisse grouper par agence/entreprise |
ah oui mais justement, j'ai besoin de récupérer des champs de la table contact !
comment est-ce que tu ferais cette requête sinon ?
anapajari a écrit : la piste de TheRom_s est bonne mais puisque tu as besoin des infos contact oublie la fin sur le group. |
- je veux remonter une ligne par agence, chaque agence a un contact (et un seul) qui a un tag "contact principal", ou alors pas de contact principal. Donc pour chaque ligne d'affichage on a : nom de l'entreprise, adresse de l'agence, nom du contact ; ou alors la même chose mais pas de nom de contact
- SQL Server 2005
edit : ma requête aujourd'hui c'est ça :
Code :
|
merci
Marsh Posté le 03-08-2007 à 11:08:25
Code :
|
un truc dans le genre mais 2/3 remarques:
- l'erreur à ne pas faire c'est de mettre dans le where de ta requête une condition sur un champs d'une des tables "left-jointée" ( si ça existe comme mot). Cela a pour fait dans transformer l'outer en inner.
- en toute théorie c'est un inner qu'il devrait y avoir entre contact et civilité pour eviter qu'un contact avec une civilité inexistante ne remonte. Mais si tu fais inner entre eux, ça transforme également ton outer.
Marsh Posté le 03-08-2007 à 11:19:38
anapajari a écrit : un truc dans le genre mais 2/3 remarques: |
okay merci beaucoup !
je comprend mieux
avec l'explication des transformations en inner join je comprend mieux le comportement dans mes tests je savais pas qu'on pouvait faire un AND dans les clauses ON
pour la civilité c'est un champ not null, donc un contact a forcément une civilité
merci
Marsh Posté le 02-08-2007 à 18:33:17
kookoo
Je (toujours) suis une merde en SQL et j'ai besoin de votre aide
J'ai 3 tables : entreprise, agence (liée à entreprise), contact (liée à agence)
Je veux récupérer toutes mes valeurs entreprises/agences/contacts (facile, sauf les contacts)
Le problème, c'est que des fois y'a pas de contact, donc forcément, avec un inner join ça me sors pas les agences/entreprises sans contact.
Je connais que le inner join en sql. J'ai testé avec un outer join (left, right, full), mais ça me met soit beaucoup trop (une ligne par contact présent sauf que j'en veux qu'un), soit pas assez d'enregistrement (quand je filtre les contacts avec un where, ça ne me met plus que les agences qui ont des contacts).
Du coup, pour le moment je m'en sors avec un sous-select, mais comme j'ai pas mal de champs à récupérer de la table contact, j'ai pas envie de faire un sous-select par champ...
Comment est-ce que je peux avoir une requête simple ?
marki
---------------
Android/Manettes/Metroidvania/Zelda/Indés/Retrogaming/VDS jeux