Сравните два столбца с одной и той же таблицей, чтобы удалить дубликаты - PullRequest
0 голосов
/ 29 мая 2019

Пример таблицы с двумя столбцами, и мне нужно сравнить столбец 1 и столбец 2 с одинаковыми записями таблицы, и необходимо удалить столбец 1 + столбец 2 = столбец 2 + столбец 1.

Я пытался выполнить самостоятельное соединение и условие случая. Но это не работает

Ответы [ 5 ]

1 голос
/ 29 мая 2019

Если я правильно понимаю, вы можете запустить простой select, например, если у вас есть все перевернутые пары в таблице:

select col1, col2
from t
where col1 < col2;

Если у вас есть несколько синглетонов, то:

select col1, col2
from t
where col1 < col2 or
      (col1 > col2 and
       not exists (select 1
                   from t t2
                   where t2.col1 = t.col2 and
                         t2.col2 = t.col1
                  )
      );
1 голос
/ 29 мая 2019

Вы можете использовать оператор , кроме оператора .

" EXCEPT возвращает отдельные строки из левого входного запроса, которые не выводятся правым входным запросом. "

SELECT C1, C2 FROM table
Except
SELECT C2, C1 FROM table

Пример с заданным набором данных: dbfiddle

0 голосов
/ 30 мая 2019

Я отправляю ответ на основе базы данных oracle, а также столбцы: строка / varchar:

удалить из таблицы, в которой находится rowid (выберите rowid из таблицы, где column1 || column2 = column2 || column1)

Не стесняйтесь предоставить больше информации, и мы можем настроить ответ.

0 голосов
/ 29 мая 2019

Хорошо. Там может быть более простой способ сделать это, но это также может сработать. {таблица} должна быть заменена именем вашей таблицы.

;with orderedtable as (select t1.col1, t1.col2, ROW_NUMBER() OVER(ORDER BY t1.col1, t1.col2 ASC) AS rownum
from (select distinct t2.col1, t2.col2 from {table} t2) as t1)

select f1.col1, f1.col2
from orderedtable f1
left join orderedtable f2 on f1.col1 = f2.col2 and f1.col2 = f2.col1 and f1.rownum < f2.rownum
where f2.rownum is null
0 голосов
/ 29 мая 2019

SQL ниже получит обратные строки col1 и col2:

select
    distinct t2.col1,t1.col2
from
    table t1
join
    table t2 on t1.col1 = t2.col2 and t1.col2 = t2.col1

И когда мы получим эти обратные строки, мы можем исключить их с помощью предложения left join, полный SQL будет:

select
    t.col1,t.col2
from
    table t
left join
    (
      select
        distinct t2.col1,t1.col2
      from
        table t1
      join
        table t2 on t1.col1 = t2.col2 and t1.col2 = t2.col1
    ) tmp on t.col1 = tmp.col1 and t.col2 = tmp.col2
where
    tmp.col1 is null

Понятно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...