SQL запрос для получения обеих сторон - PullRequest
0 голосов
/ 02 февраля 2019

Допустим, у меня есть следующая таблица базы данных

Id = int
Source = nvarchar(1)
Destination = nvarchar(1)

В основном это представляет отношение

Source -> Destination
Destination -> Source

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

Я пытаюсь написать SQL-запрос, который будет возвращать результат обеих сторон.Во всех примерах я хочу получить информацию для «A»

Если таблица имеет

Id = 0
Source = "A"
Destination = "B"

, я хотел бы иметь следующую строку

FirstId = 0, SecondId = NULL

Еслитаблица имеет

Id = 1
Source = "B"
Destination = "A"

Я хотел бы иметь следующую строку

FirstId = NULL, SecondId = 1

Если таблица имеет

Id = 0
Source = "A"
Destination = "B"
Id = 1
Source = "B"
Destination = "A"

Я хотел бы иметь следующую строку

FirstId = 0, SecondId = 1

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Думаю, я бы попробовал полное внешнее соединение на самой таблице:

SELECT A.ID SRCID, B.ID DESTID
FROM TBL A FULL OUTER JOIN TBL B ON A.SOURCE=B.DESTINATION AND B.SOURCE=A.DESTINATION AND A.ID<>B.ID AND (B.DESTINATION='A' OR B.SOURCE='A')
WHERE NVL(A.SOURCE, 'A')='A' OR NVL(A.DESTINATION, 'A')='A'
0 голосов
/ 02 февраля 2019

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

select max(case when source = 'A' then id end) as a_id,
       max(case when source = 'B' then id end) as b_id       
from t
where source in ('A', 'B') and
      destination in ('A', 'B');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...