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.
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. 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
  2. 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
    1. 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
      1. 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
      2. 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
  3. 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
  4. 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