[英]Oracle query where field1=field2 and field2=field1
So I have a table that holds a link relationship. 因此,我有一个表,其中包含链接关系。 Field1 is and ID and Filed2 is an ID.
字段1是ID,文件2是ID。 So far I've eliminated duplicate Field1\\Field2 combinations.
到目前为止,我已经消除了重复的Field1 \\ Field2组合。 However I still have cases where the inverse occurs.
但是,我仍然有逆向发生的情况。 Meaning Field1 occurs as Field2 and Field2 occurs in Field1 for the same record.
意思是对于同一条记录,Field1出现为Field2,而Field2出现在Field1中。 I tried a subquery within in inner join but it's returning way to many rows.
我在内部联接中尝试了一个子查询,但是它返回了很多行。 Thanks in advance!
提前致谢!
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;
Sample data: 样本数据:
insert into linktable(field1, field2) values ('ABC', '123');
insert into linktable(field1, field2) values ('123', 'ABC');
I want to identify and remove cases where the above sample data occurs. 我想确定并删除发生上述示例数据的情况。
Something like this should get you the pairs: 像这样的东西应该让你成对:
SELECT a.field1, a.field2
FROM linktable a
JOIN linktable b ON (b.field1 = a.field2 AND b.field2 = a.field1)
Edit: An example of finding one of the pairs: 编辑:查找对之一的示例:
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);
Result: 结果:
FIELD1 FIELD2 ID_TO_DELETE
123 ABC 1
ABC 123 1
Is this what you want? 这是你想要的吗?
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;
This returns one instance of field1
/ field2
regardless of ordering. 无论顺序如何,这将返回
field1
/ field2
一个实例。
You should post sample data and expected result. 您应该发布示例数据和预期结果。
I think this query may work for you, this prevent the inverse occurs as field1, field2
= (x, y)
and (y, x)
我认为此查询可能对您
field1, field2
,这可以防止当field1, field2
= (x, y)
和(y, x)
时发生逆field1, field2
SELECT field1, field2
FROM linktable
WHERE field1 >= field2;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.