Postgresql присоединиться к той же таблице - PullRequest
0 голосов
/ 02 июля 2018

У меня есть таблица с полями:

line_id, point_address:
1 | Address1
1 | Address2
2 | Address1
2 | Address3
3 | Address2
3 | Address3

Для результата мне нужна таблица с одной строкой для каждого line_id и оба значения point_address line_id в отдельных строках:

line_id,point_address_1,point_address_2:
1 | Address1 | Address2
2 | Address1 | Address3
3 | Address2 | Address3

Я пытался создать самостоятельное соединение, но я получил 4 результата для каждого line_id со всеми комбинациями полей point_address. Каков наилучший способ получить один результат

1 Ответ

0 голосов
/ 02 июля 2018

Предполагая, что в каждом отдельном line_id есть только два адреса, вы можете обойти эту проблему, наведя порядок на point_address в таблице результатов:

SELECT
    l1.line_id, l1.point_address AS point_address1, 
        l2.point_address AS point_address2
    FROM line_address l1 JOIN line_Address l2 ON l1.line_id = l2.line_id
    WHERE l1.point_address < l2.point_address;

line_id     point_address1  point_address2
----------  --------------  --------------
1           Address1        Address2      
2           Address1        Address3      
3           Address2        Address3   

Обратите внимание, что это работает только в вышеприведенном предположении, следовательно, если мы добавим

INSERT INTO line_address (line_id, point_address) VALUES (3, 'Address4');

выборка дает

line_id     point_address1  point_address2
----------  --------------  --------------
1           Address1        Address2      
2           Address1        Address3      
3           Address2        Address3      
3           Address2        Address4      
3           Address3        Address4 

Реляционная алгебра не воспринимает это любезно, когда вы пытаетесь превратить строки в столбцы и наоборот.

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