Oracle查询,其中field1 = field2和field2 = field1

时间:2019-03-19 01:21:21

标签: sql oracle

因此,我有一个包含链接关系的表。字段1是ID,文件2是ID。到目前为止,我已经消除了重复的Field1 \ Field2组合。但是,我仍然有逆向发生的情况。意思是对于同一条记录,Field1出现为Field2,而Field2出现在Field1中。我在内部联接中尝试了一个子查询,但是它返回了很多行。预先感谢!

select a.field1, a.field2 from linktable
inner join (select field1, field2 from linktable) b on a.field1=b.field2 and a.field2=b.field1;

样本数据:

insert into linktable(field1, field2) values ('ABC', '123');
insert into linktable(field1, field2) values ('123', 'ABC');

我想确定并删除发生上述示例数据的情况。

3 个答案:

答案 0 :(得分:1)

像这样的东西应该让你成对:

SELECT a.field1, a.field2
  FROM linktable a
  JOIN linktable b ON (b.field1 = a.field2 AND b.field2 = a.field1)

编辑:查找其中一对的示例:

create table linktable(id number, field1 varchar2(32), field2 varchar2(32));
insert into linktable(id, field1, field2) values (1, 'ABC', '123');
insert into linktable(id, field1, field2) values (2, '123', 'ABC');

SELECT a.field1, a.field2, LEAST(a.id, b.id) AS id_to_delete
  FROM linktable a
  JOIN linktable b ON (b.field1 = a.field2 AND b.field2 = a.field1);

结果:

FIELD1  FIELD2  ID_TO_DELETE
123     ABC     1
ABC     123     1

答案 1 :(得分:0)

这是您想要的吗?

post

这将返回select field1, field2 from (select field1, field2, row_number() over (partition by least(field1, field2), greatest(field1, field2) order by field1) as seqnum from t ) t where seqnum = 1; / field1的一个实例,而与顺序无关。

答案 2 :(得分:0)

您应该发布示例数据和预期结果。

我认为此查询可能对您有用,这可以防止由于field1, field2 = (x, y)(y, x)而出现倒数

SELECT field1, field2 
FROM linktable
WHERE field1 >= field2;