SQL объединяет вывод двух столбцов в один столбец - PullRequest
1 голос
/ 17 февраля 2011

У меня есть следующие таблицы

person: id,name
1, mani
2, senthil
3, jack
4, alan

relation: relname,id1,id2 (id1 and id2 refers to person.id)
rel1, 1,3
rel2, 2,3
rel1, 4,1

Я хочу сформировать запрос, который возвращает идентификаторы лиц, связанных друг с другом. Запрос должен вернуть:

1
3
2
3
4
1

Здесь (1,3) - пара, затем (2,3) и т. Д.

Не могли бы вы сформировать такой запрос?

Ответы [ 3 ]

4 голосов
/ 17 февраля 2011

One Way (предполагается, что id1,id2 - составной ПК, чтобы избежать дублирования)

SELECT id
FROM
(
select id1 as id, id1,id2 from relation
union all
select id2 as id, id1,id2 from relation
) T
ORDER BY id1,id2

Если ваша СУБД поддерживает UNPIVOT, вы можете сделать это с помощью одного сканирования таблицы.

0 голосов
/ 17 февраля 2011

Сначала вы можете попытаться создать результат столбца, например CSV

 1,3,2,3,4,1

И затем из этого CVS извлекать строки.

Создание этого запроса зависит от используемой вами СУБД.

Я думаю, что с помощью некоторой поисковой системы в Интернете (amazon, bing, google) мы сможем решить эту проблему самостоятельно.

0 голосов
/ 17 февраля 2011
select id1 from relation
union
select id2 from relation

(но порядок не будет в вашем примере).

Вы также можете перебирать пары и создавать список:

// metalanguage
resultSet = executeQuery("select id1, id2 from relation");
List list = new List();
while (resultSet.hasNext()) {
    list.add(resultSet.get("id1");
    list.add(resultSet.get("id2");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...