OVH Cloud OVH Cloud

probleme de select

1 réponse
Avatar
sylvie
Je fais un travail sur la géologie. Une plaque est constituée d'une portion.
Cette plaque rencontre une autre plaque qui est constituée d'une autre
portion de plaque. Lorsque ces deux plaques se heurtent, elles engendrent une
tension qui donne un exemple de chaîne de montagnes ou d'arcs insulaires.J'ai
5 tables : Plaque(Id_plaque,Nom),Portion(Id_portion,Id_plaque,Type),Se
heurtent et
engendrent(Id_portion_plaque1,Id_portion_plaque2,Id_tension),Tension(Id_tension,Type_tension),Exemple_concret(Id_exemple,Id_tension,Exemple).
Ces tables sont reliées entre elles comme suit;Plaque vers Portion vers "Se
heurtent et engendrent"vers Tension vers Exemple concret. Si je fais une vue
reprenant toutes ces tables et que la tension est la même (ce qui arrive
souvant),si j'encode deux exemples, j'ai quatres résultats.Exemple, la plaque
a rencontre la plaque b, la tension est ocg (pour oceanique,continentale et
glissement) cela donne l'exemple1.
Si la plaque c rencontre la plaque d, la tension est ocg (pour
oceanique,continentale et glissement) cela donne l'exemple2. Lorsque je lance
ma vue, j'ai 4 exemples (a et b ont comme tension ocg et donne exemple 1,a et
b ont comme tension ocg et donne exemple 2,c et d ont comme tension ocg et
donne exemple 1,c et d ont comme tension ocg et donne exemple 2). Ce qui est
logique puisque la vue reprend toutes les tension identiques. Que dois-je
faire pour que la vue ne reprennent que les deux exemples(a et b, tension
ocg, exemple1 et c et d, tension ocg, exemple2). Voici le code de la vue:
SELECT Plaque_1.Nom AS Expr1, Plaque_2.Nom, dbo.[Se heurtent et
engendrent].Id_tension, dbo.Tension.Id_tension AS Expr2,
dbo.[Exemple concret].Exemple
FROM dbo.Tension INNER JOIN
dbo.Plaque Plaque_2 INNER JOIN
dbo.Portion Portion_2 ON Plaque_2.Id_plaque =
Portion_2.Id_plaque INNER JOIN
dbo.[Se heurtent et engendrent] ON
Portion_2.Id_portion = dbo.[Se heurtent et engendrent].Id_portion_plaque1 ON
dbo.Tension.Id_tension = dbo.[Se heurtent et
engendrent].Id_tension INNER JOIN
dbo.[Exemple concret] ON dbo.Tension.Id_tension =
dbo.[Exemple concret].Id_tension INNER JOIN
dbo.Plaque Plaque_1 INNER JOIN
dbo.Portion Portion_1 ON Plaque_1.Id_plaque =
Portion_1.Id_plaque ON dbo.[Se heurtent et engendrent].Id_portion_plaque2 =
Portion_1.Id_portion

Aidez-moi s'il-vous-plaît
sylvie

1 réponse

Avatar
Fred BROUARD
Votre requête n'est pas incorrecte. Tout dépen de vos données.

SELECT Plaque_1.Nom AS Expr1, Plaque_2.Nom,
dbo.[Se heurtent et engendrent].Id_tension,
dbo.Tension.Id_tension AS Expr2,
dbo.[Exemple concret].Exemple

FROM dbo.Tension

INNER JOIN dbo.[Se heurtent et engendrent]
ON dbo.Tension.Id_tension = dbo.[Se heurtent et
engendrent].Id_tension

INNER JOIN dbo.Portion Portion_1
ON dbo.[Se heurtent et engendrent].Id_portion_plaque2 =
Portion_1.Id_portion

INNER JOIN dbo.Plaque Plaque_1
ON Plaque_1.Id_plaque = Portion_1.Id_plaque

INNER JOIN dbo.Portion Portion_2
ON Portion_2.Id_portion = dbo.[Se heurtent et
engendrent].Id_portion_plaque1

INNER JOIN dbo.Plaque Plaque_2
ON Plaque_2.Id_plaque = Portion_2.Id_plaque

INNER JOIN dbo.[Exemple concret]
ON dbo.Tension.Id_tension = dbo.[Exemple concret].Id_tension

Mieux vuadrait que vos noms d'objet SQL respectent la norme et notamment sans
espace caractères diacritiques et autre fantaisies.

Utilisez aussi des alias, ce sera plus lisible.

A +


sylvie a écrit:
Je fais un travail sur la géologie. Une plaque est constituée d'une portion.
Cette plaque rencontre une autre plaque qui est constituée d'une autre
portion de plaque. Lorsque ces deux plaques se heurtent, elles engendrent une
tension qui donne un exemple de chaîne de montagnes ou d'arcs insulaires.J'ai
5 tables : Plaque(Id_plaque,Nom),Portion(Id_portion,Id_plaque,Type),Se
heurtent et
engendrent(Id_portion_plaque1,Id_portion_plaque2,Id_tension),Tension(Id_tension,Type_tension),Exemple_concret(Id_exemple,Id_tension,Exemple).
Ces tables sont reliées entre elles comme suit;Plaque vers Portion vers "Se
heurtent et engendrent"vers Tension vers Exemple concret. Si je fais une vue
reprenant toutes ces tables et que la tension est la même (ce qui arrive
souvant),si j'encode deux exemples, j'ai quatres résultats.Exemple, la plaque
a rencontre la plaque b, la tension est ocg (pour oceanique,continentale et
glissement) cela donne l'exemple1.
Si la plaque c rencontre la plaque d, la tension est ocg (pour
oceanique,continentale et glissement) cela donne l'exemple2. Lorsque je lance
ma vue, j'ai 4 exemples (a et b ont comme tension ocg et donne exemple 1,a et
b ont comme tension ocg et donne exemple 2,c et d ont comme tension ocg et
donne exemple 1,c et d ont comme tension ocg et donne exemple 2). Ce qui est
logique puisque la vue reprend toutes les tension identiques. Que dois-je
faire pour que la vue ne reprennent que les deux exemples(a et b, tension
ocg, exemple1 et c et d, tension ocg, exemple2). Voici le code de la vue:
SELECT Plaque_1.Nom AS Expr1, Plaque_2.Nom, dbo.[Se heurtent et
engendrent].Id_tension, dbo.Tension.Id_tension AS Expr2,
dbo.[Exemple concret].Exemple
FROM dbo.Tension INNER JOIN
dbo.Plaque Plaque_2 INNER JOIN
dbo.Portion Portion_2 ON Plaque_2.Id_plaque =
Portion_2.Id_plaque INNER JOIN
dbo.[Se heurtent et engendrent] ON
Portion_2.Id_portion = dbo.[Se heurtent et engendrent].Id_portion_plaque1 ON
dbo.Tension.Id_tension = dbo.[Se heurtent et
engendrent].Id_tension INNER JOIN
dbo.[Exemple concret] ON dbo.Tension.Id_tension =
dbo.[Exemple concret].Id_tension INNER JOIN
dbo.Plaque Plaque_1 INNER JOIN
dbo.Portion Portion_1 ON Plaque_1.Id_plaque =
Portion_1.Id_plaque ON dbo.[Se heurtent et engendrent].Id_portion_plaque2 =
Portion_1.Id_portion

Aidez-moi s'il-vous-plaît
sylvie



--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************