Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[SQL] aide jointure

4 réponses
Avatar
Manu Pavy
Bonjour,

J ai besoin d'aide sur une requete pas =E9vidente : s=E9lectionner les=20
documents de chaque zone, secteur, locaux et postetravail :
en sachant que les table docXXX repr=E9sentent les tables de liaison de=20
doc et XXX. Cependant, si aucun document n'est pr=E9sent, je voudrais tou=
t=20
de meme "l'architecture" de la zone

zones --> Secteurs --> Locaux --> Postetravail
| | | |
- Doc | | |
- Doc | |
- Doc |
- Doc

O=F9 Doc est =E9videmment une seule et meme table.

J'=E9tais parti sur ca, mais ca ne marche pas : les secteurs sans doc ont=
=20
le doc de la zone associ=E9e.

SELECT Zones.NomZone, Secteurs.NomSecteur, Locaux.NomLocal,=20
PosteTravail.NomPosteTravail, Doc.NomDoc
FROM Zones
left outer join Secteurs on Secteurs.IDZones =3D Zones.IDZones
left outer join Locaux on Locaux.IDSecteurs =3D Secteurs.IDSecteurs
left outer join PosteTravail on PosteTravail.IDLocaux =3D Locaux.IDLocaux=


left outer join DocZone on DocZone.IdZone =3D Zones.IDZones
left outer join DocSecteur on DocSecteur.IdSecteur =3D Secteurs.IDSecteur=
s
left outer join DocLocaux on DocLocaux.IdLocaux =3D Locaux.IDLocaux
left outer join DocPoste on DocPoste.IdPoste =3D PosteTravail.IDPosteTrav=
ail

left join Doc on (Doc.IdDoc =3D DocZone.IdDoc
or Doc.IdDoc =3D DocSecteur.IdDoc
or Doc.IdDoc =3D DocLocaux.IdDoc
or Doc.IdDoc =3D DocPoste.IdDoc)



J'ai =E9galement tent=E9 de faire un where (pour les or) sans plus de suc=
c=E8s=20
: les zones sans doc disparraissaient


Merci beaucoup pour aide,

Manu

4 réponses

Avatar
Fred BROUARD - SQLpro
La syntaxe correcte pour ce faire est :

SELECT Zones.NomZone, Secteurs.NomSecteur, Locaux.NomLocal,
PosteTravail.NomPosteTravail, Doc.NomDoc

FROM Zones Z
LEFT OUTER JOIN Secteurs S
ON Z.IDZones = S.IDZones

LEFT OUTER JOIN Locaux L
ON S.IDSecteurs = L.IDSecteurs

LEFT OUTER JOIN PosteTravail PT
ON L.IDLocaux = PT.IDLocaux

WHERE Machin = 'truc' OR Machin IS NULL

ou encore intégrer la clause WHERE dans les prédicats ON dans ce cas inutile de
préciser le IS NULL

A +


Manu Pavy a écrit:
Bonjour,

J ai besoin d'aide sur une requete pas évidente : sélectionner les
documents de chaque zone, secteur, locaux et postetravail :
en sachant que les table docXXX représentent les tables de liaison de
doc et XXX. Cependant, si aucun document n'est présent, je voudrais tout
de meme "l'architecture" de la zone

zones --> Secteurs --> Locaux --> Postetravail
| | | |
- Doc | | |
- Doc | |
- Doc |
- Doc

Où Doc est évidemment une seule et meme table.

J'étais parti sur ca, mais ca ne marche pas : les secteurs sans doc ont
le doc de la zone associée.

SELECT Zones.NomZone, Secteurs.NomSecteur, Locaux.NomLocal,
PosteTravail.NomPosteTravail, Doc.NomDoc
FROM Zones
left outer join Secteurs on Secteurs.IDZones = Zones.IDZones
left outer join Locaux on Locaux.IDSecteurs = Secteurs.IDSecteurs
left outer join PosteTravail on PosteTravail.IDLocaux = Locaux.IDLocaux

left outer join DocZone on DocZone.IdZone = Zones.IDZones
left outer join DocSecteur on DocSecteur.IdSecteur = Secteurs.IDSecteurs
left outer join DocLocaux on DocLocaux.IdLocaux = Locaux.IDLocaux
left outer join DocPoste on DocPoste.IdPoste = PosteTravail.IDPosteTravail

left join Doc on (Doc.IdDoc = DocZone.IdDoc
or Doc.IdDoc = DocSecteur.IdDoc
or Doc.IdDoc = DocLocaux.IdDoc
or Doc.IdDoc = DocPoste.IdDoc)



J'ai également tenté de faire un where (pour les or) sans plus de succès
: les zones sans doc disparraissaient


Merci beaucoup pour aide,

Manu




--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Manu Pavy
Fred BROUARD - SQLpro a fait part de :

La syntaxe correcte pour ce faire est :

SELECT Zones.NomZone, Secteurs.NomSecteur, Locaux.NomLocal,
PosteTravail.NomPosteTravail, Doc.NomDoc

FROM Zones Z
LEFT OUTER JOIN Secteurs S
ON Z.IDZones = S.IDZones

LEFT OUTER JOIN Locaux L
ON S.IDSecteurs = L.IDSecteurs

LEFT OUTER JOIN PosteTravail PT
ON L.IDLocaux = PT.IDLocaux

WHERE Machin = 'truc' OR Machin IS NULL

ou encore intégrer la clause WHERE dans les prédicats ON dans ce ca s
inutile de préciser le IS NULL

A +



Salut et merci de t intéresser à mon pb.
Le pb dans ta solution est que Doc n'apparait pas. Ou j ai pas compris.
Qu est ce que machin ?
Si je fais une jointure de Doc pour chacune des tables associées, il
faut lui mettre un alias différent et du coup, il ne retourne pas un
champ (nomDoc par exemple), mais autant qu il y a de jointures.

Peut etre ai je mal expliqué mon pb. (un petit dessin ne fait jamais de
mal :
http://manupavy.free.fr/relDoc.gif

Le but étant d'avoir l'arborescence zones, secteurs, locaux,
posteTravail et chacun de leur Doc associés.


Merci pour votre aide,


Manu

PS : le schéma est du merise simplifié, (relation inversé par rappo rt à UML)
Avatar
Fred BROUARD - SQLpro
Il faudrait que tu livre la descriptio de tes tables sous formes d'ordres SQL du
genre :
CREATE TABLE...
cele nous permettra de connaitre les colonnes les clefs...

Sans cela pas d'aide possible.
On ne parle pas efficacement dans le vide !

A +

Manu Pavy a écrit:
Fred BROUARD - SQLpro a fait part de :

La syntaxe correcte pour ce faire est :

SELECT Zones.NomZone, Secteurs.NomSecteur, Locaux.NomLocal,
PosteTravail.NomPosteTravail, Doc.NomDoc

FROM Zones Z
LEFT OUTER JOIN Secteurs S
ON Z.IDZones = S.IDZones

LEFT OUTER JOIN Locaux L
ON S.IDSecteurs = L.IDSecteurs

LEFT OUTER JOIN PosteTravail PT
ON L.IDLocaux = PT.IDLocaux

WHERE Machin = 'truc' OR Machin IS NULL

ou encore intégrer la clause WHERE dans les prédicats ON dans ce cas
inutile de préciser le IS NULL

A +




Salut et merci de t intéresser à mon pb.
Le pb dans ta solution est que Doc n'apparait pas. Ou j ai pas compris.
Qu est ce que machin ?
Si je fais une jointure de Doc pour chacune des tables associées, il
faut lui mettre un alias différent et du coup, il ne retourne pas un
champ (nomDoc par exemple), mais autant qu il y a de jointures.

Peut etre ai je mal expliqué mon pb. (un petit dessin ne fait jamais de
mal :
http://manupavy.free.fr/relDoc.gif

Le but étant d'avoir l'arborescence zones, secteurs, locaux,
posteTravail et chacun de leur Doc associés.


Merci pour votre aide,


Manu

PS : le schéma est du merise simplifié, (relation inversé par rapport à UML)




--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Manu Pavy
Fred BROUARD - SQLpro a fait part de :
Il faudrait que tu livre la descriptio de tes tables sous formes
d'ordres SQL du genre :
CREATE TABLE...
cele nous permettra de connaitre les colonnes les clefs...

Sans cela pas d'aide possible.
On ne parle pas efficacement dans le vide !

A +




Finalement, je me suis tourné vers vers une autre solution applicative
(plus conviviale d'ailleurs) et qui fait appel à des requetes simplifié es.

Merci à toi,


Manu