簡體   English   中英

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

[英]Oracle query where field1=field2 and field2=field1

因此,我有一個表,其中包含鏈接關系。 字段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');

我想確定並刪除發生上述示例數據的情況。

像這樣的東西應該讓你成對:

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

這是你想要的嗎?

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 / field2一個實例。

您應該發布示例數據和預期結果。

我認為此查詢可能對您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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM