在我的Rails应用程序中,我有一个relationships
表,其中包含2列origin_id
和target_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)。
答案 0 :(得分: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
答案 1 :(得分:0)
这种逻辑应该有用。语法将取决于您未指定的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)