【问题标题】:Finding relationship records for which there is no reverse relationship查找不存在反向关系的关系记录
【发布时间】:2013-11-18 17:20:07
【问题描述】:

在我的 Rails 应用程序中,我有一个 relationships 表,其中包含 2 列 origin_idtarget_id。我需要建立一个范围without_reverse_relationship,它返回所有没有反向关系的关系。

例如,如果我有以下 relationships 记录:

origin_id target_id 
     1          2
     2          1
     1          3

我希望Relationship.without_reverse_relationship 只返回最后一条记录(origin_id = 1,target_id = 3),因为表中不存在反向记录(origin_id = 3,target_id = 1)。

【问题讨论】:

    标签: sql ruby-on-rails arel


    【解决方案1】:

    试试这个:

    SELECT r1.*
    FROM relationships r1
      LEFT JOIN relationships r2
        ON r2.origin_id = r1.target_id
          AND r2.target_id = r1.origin_id
    WHERE r2.origin_id IS NULL 
    

    【讨论】:

      【解决方案2】:

      这种逻辑应该有效。语法将取决于您未指定的 rdbms。

       select *
       from relationships
       where concat(to_string(originId), to_string(target_id)) in
       (select concat(to_string(originId), to_string(target_id))
       from relationships
       except 
       select concat(to_string(target_id), _string(originId))
       from relationships)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-24
        • 1970-01-01
        • 2012-02-28
        相关资源
        最近更新 更多