【问题标题】:SQL Help Needed需要 SQL 帮助
【发布时间】:2012-09-26 18:51:36
【问题描述】:

下面是我的表格的简化版本。

    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)

【问题讨论】:

    标签: sql sql-server subquery except


    【解决方案1】:

    我会使用下面的 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
      )
    

    【讨论】:

      【解决方案2】:

      简单:

      select frid, relfrid from frrelmst where  frid < relfrid
      

      【讨论】:

      • 很好,但是如果记录 123, 456, Husband/Wife 不存在怎么办?还是总是有两种关系的表现形式?
      • @acatt 。 . .该问题明确表示“每组两条记录中的一条”,因此在这种情况下它不是问题。但是,该解决方案不可推广。
      • @acatt:正如 Gordon 指出的那样,情况并非如此。如果是,则必须将条件更改为 ... FROM frrelmst a WHERE frid &lt; relfrid OR frid &gt; relfrid AND NOT EXISTS (SELECT * FROM frrelmst b WHERE b.frid = a.relfrid AND b.relfrid = a.frid)
      • 我将保存这个示例以供将来参考!!谢谢
      猜你喜欢
      • 1970-01-01
      • 2018-07-09
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      相关资源
      最近更新 更多