Member 13629523 Ответов: 2

Как я могу получить нижеприведенный вывод в sql. Пожалуйста, помогите мне написать запрос, чтобы получить ожидаемый результат


x y
20 20
20 20
21 22
22 21
23 24
24 25
25 24

у меня есть приведенная выше таблица с 2 столбцами.мне нужно отфильтровать аналогичный набор данных из 2 столбцов и отобразить его как один set.in кратко мой вывод должен быть таким как показано ниже :

x y
20 20
21 22
24 25

в основном я хочу, чтобы записи с аналогичным набором, например 21,22 и 22,21, рассматривались как аналогичный набор, и поэтому я хочу отобразить только одну запись как 21,22.в то время как 23,24 не имеет аналогичного набора(24,23) в таблице, поэтому я хочу исключить эту запись.

Что я уже пробовал:

я попробовал сгруппироваться, но это не работает

OriginalGriff

Извините, но это не имеет большого смысла: вам нужно более подробно объяснить, почему некоторые результаты этого ввода включены, а другие нет: что случилось, например, с "23"? "22, 21" тоже нет. А почему бы и нет?

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Member 13629523

Обновили мой вопрос.

2 Ответов

Рейтинг:
2

Jörgen Andersson

Этот запрос удаляет дубликаты, если вам нужно несколько одинаковых пар, он не будет работать.

WITH r as (
    SELECT  X
           ,Y
           ,ROW_NUMBER() OVER (ORDER BY X,Y) rn
    FROM    t
    )
SELECT  DISTINCT x,y
FROM    r t1
WHERE EXISTS (
    SELECT  x, y
    FROM    r t2
    WHERE   t1.x=t2.y
        AND t1.y=t2.x
        AND t1.rn<t2.rn)

Скрипка SQL[^]


Karthik_Mahalingam

5

Рейтинг:
2

debasish mishra

select table1.id, table1.x, table1.y
from yourtable table1
where exists (select x, y
from yourtable table2
where table1.x=table2.y and table1.y=table2.x)
Union
select t1.x, t1.y
from yourtable t1
where exists (select x, y
from yourtable t2
where t1.x=t2.y and t1.x=t2.y)
and t1.x<t1.y


Пожалуйста, не копируйте и не вставляйте код напрямую.Я полагаю, что здесь есть какая-то синтаксическая проблема.Сначала разрешите это, а затем основная логика будет с операторами"и" или".
Я протестировал это решение для второго запроса после объединения в sql fiddle.Пожалуйста, проголосуйте, это действительно поможет сообществу.

Скрипка SQL[^]


Member 13629523

у меня нет столбца id в моей таблице.

[no name]

Можете ли вы удалить group by и having, а затем попробовать

Member 13629523

не работает удаление having и group by также.

[no name]

Удалите условие после "или",вы получите данные типа "20 20", а затем объединение

выбрать таблица1.идентификатор таблица1.х, таблица1.г
от yourtable таблица1
где существует (выберите x, y
от yourtable таблица2
где table1.x=table2.y и table1.y=table2.x)

и попробуйте выполнить два отдельных запроса перед написанием Union

Member 13629523

он просто удаляет 20,20 дубликатов и дает только одну запись для 20,20.Не работает для других наборов.

[no name]

Окончательный запрос будет выглядеть следующим образом.

выбрать таблица1.идентификатор таблица1.х, таблица1.г
от yourtable таблица1
где существует (выберите x, y
от yourtable таблица2
где table1.x=table2.y и table1.y=table2.x)
Союз
выберите t1.x, t1.y
от yourtable Т1
где существует (выберите x, y
от yourtable Т2
где t1.x=t2.y и t1.x=t2.y)
и t1.x<t1.y

Обновление также происходит в решении.Продолжайте кодировать с помощью SQL Fiddle, как это делал я, и только тогда вы легко получите решения.Пожалуйста, проголосуйте за это решение, и оно действительно поможет сообществу.