Requête SQL

Résolu
dutche Messages postés 83 Statut Membre -  
mouè Messages postés 32 Statut Membre -
Bonjour,

Voici une partie de ma BD SQL Server 2000,
j'ai deux tables Personne(Code, Nom, Prénom) et Epoux(Code_epoux, Code_epouse, Date_mar)
NB: code_epoux et code_epouse sont issu de table Personne (Code) lors de la migration de la clé: Personne était une table avec une relation reflexive.

J'aimerais selectionné le nom et le prénom de soit l'époux de la personne (avec le code fourni en paramête ) ou l'epouse de la personne.
Ex: Personne (1, Riberry, Franck)
Personne(2, Kate, wintsley)
Personne(3, Durand, Arnaud)
Epoux(1,2, 14/02/2009)

Lorsque le code fournit en paramètre est 1 par exple je voudrais avoir : Kate Wintsley
Lorsque le code fournit en paramètre est 2 par exple je voudrais avoir : Riberry Franck

J'espère me faire comprendre.

4 réponses

Moeb Messages postés 103 Statut Membre 12
 
SELECT Personne.Nom
FROM Personne
WHERE Personne.Code IN
((SELECT Personne.Code
FROM Personne, Epoux
WHERE Personne.Code = Epoux.Code_epoux
AND Code_epouse = 'toncode')
OR
(SELECT Personne.Code
FROM Personne, Epoux
WHERE Personne.Code = Epoux.Code_epouse
AND Code_epoux = 'toncode'))

Ca marche... peut être... mais c'est super moche.
0
bwaze Messages postés 51 Statut Membre 7
 
une idée à revoire bien sûre
au lieu de 2 tables tu crées 3 tables
-Personne(code,Nom,Prenom)
-Epoux(code_epoux,date_mariage)
-Epouse(code_epouse,date_mariage)
et dans ce cas je pense que la requette sera plus simple
mais bon tout depend de comment ta construit ta base
0
Moeb Messages postés 103 Statut Membre 12
 
Euh, dans ce cas, vaut mieux rajouter les foreign key dans époux et épouse, le lien vers leur conjoint quoi, sinon t'as aucun moyen de savoir qui va avec qui
0
bwaze Messages postés 51 Statut Membre 7 > Moeb Messages postés 103 Statut Membre
 
ta parfaitement raison je pense avec des foreign key dans Epoux et Epouse faisant references à Personne(code) rendrais la requette trés simple
0
Moeb Messages postés 103 Statut Membre 12 > bwaze Messages postés 51 Statut Membre
 
Ouais mais bon, c'est un peu sale comme manière de concevoir le probleme de faire une table par gugusse.
Autant faire une seule table personne et un mariage c'est une auto-jointure...
0
dutche Messages postés 83 Statut Membre
 
Excusez moi pour le retard avec lequelle je vous envoie mon message,
Tout d'abord je tiens à vous remercier pour vos reponses.

L'idée de bwaz de créer 3 tables n'est pas mauvaise mais elle aurait pour conséquence de grossir ma bd.
Grâce à Dieu j'ai eu une solution 3 jours après avoir mis en ligne ce message mais pour un problème de connexion je n'ai pas pu le bublié. Voici ma reponse:

declare @code int, @code_epouse int, @code_epoux int
set @code=valRech -- valeur rechercher
set @code_epoux=(Select code_epoux from epoux
where code_epouse=@code)
set @code_epouse=(select code_epouse from epoux
where code_epoux=@code)
SELECT nom, Prenoms
FROM Personne P INNER JOIN Epoux E on Code=Code_epoux or Code=Code_epouse
WHERE Code in (
Select Case
when @code in (Select Code_epoux from Epoux) then @code_epouse

when @code in (Select Code_epouse from Epoux) then @code_epoux

End As Code)


c'est peut être un peu lourd mais ça marche bien.
Merci
0
mouè Messages postés 32 Statut Membre
 
Je galère également sur une requête:

Il faut que j'affiche la dernière fois que chaque client à commandé un produit de tel ou tel famille de produit.

Pour cela j'ai une table article avec code article, code regroupement (famille d'article).

une table client avec toute les infos client et code client.

et une table qwery avec code article, code client, année, mois, jour.


Voila en gros mon problème. J'espère que quelqu'un pourra m'aider.
0