2012-10-05 298 views
1

下面是我的表格的简化版本。SQL帮助需要

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

我想只拉一个表示关系(只是两个记录的每个集合中的一个)。我已经尝试了很多东西,包括EXCEPT和SUBSELECTS,我试过的所有东西都没有结果,因为左边的每个数字也都表示在右边。任何想法如何获得我正在寻找的结果?我已经尝试了以下查询的每个组合。

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) 

回答

7

简单:

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

我喜欢这个。 。 。聪明。 –

+0

辉煌!谢谢! – user1475911

+0

好,但如果记录'123,456,丈夫/妻子'不存在会发生什么?或者是否会一直存在两种关系的表征? – acatt

0

我会用下面的SQL。如果表中只存在关系的一个表示,它仍然会被返回。

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 
)