2012-10-05 6 views
1

Vous trouverez ci-dessous une version simplifiée de ma table.Aide SQL requise

FRID, RELFRID, Relationship 
    123, 456, Husband/Wife 
    456, 123, Wife/Husband 
    345, 765, Brother/Sister 
    765, 345, Sister/Brother 

Je veux tirer une seule représentation de la relation (juste un de chaque ensemble de deux dossiers). J'ai essayé un certain nombre de choses, y compris EXCEPT et SUBSELECTS et tout ce que j'essaie n'aboutit à rien parce que tous les nombres sur la gauche sont également représentés sur la droite. Toute idée comment obtenir les résultats que je cherche? J'ai essayé toutes les combinaisons de requêtes ci-dessous.

select frid, relfrid from frrelmst 
    except 
    select frid, relfrid from frrelmst 
    where frid in (select relfrid from frrelmst) 
    order by frid, relfrid 

    Select frid, relfrid from frrelmst where 
    relfrid+frid not in (select frid+relfrid from frrelmst) 

Répondre

7

Facile:

select frid, relfrid from frrelmst where frid < relfrid 
+1

J'aime ça. . .intelligent. –

+0

Brillant! Merci! – user1475911

+0

Bon, mais que se passe-t-il si le dossier «123, 456, mari/femme» n'existe pas? Ou y aura-t-il toujours les deux représentations d'une relation? – acatt

0

j'utiliser le SQL ci-dessous. Si une seule représentation de la relation existe dans la table, elle sera toujours renvoyée.

SELECT frid, relfrid, relationship 
FROM frrelmst f 
WHERE frid < relfrid 
    OR NOT EXISTS (
    SELECT 1 
    FROM frrelmst 
    WHERE frid = f.relfrid 
     AND relfrid = f.frid 
     AND frid <= f.frid 
)