Преобразовать строку с двумя столбцами в две строки одного столбца - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть два столбца, confid1 и confid2. Они оба имеют одинаковый тип данных.

Мне как-то нужно внести confid2 в confid1, но не объединять их. Вместо этого вставьте его в новую строку под confid1.

Оригинал:

confid1     confid2
AACII1C1    AACII1C2

Я пытался использовать UNION, как показано ниже:

(SELECT confid1 as ID1 FROM dyndomrun)
UNION
(SELECT confid2 as ID2 FROM dyndomrun)

Затем возвращается комбинация confid1 и confid2 внутри confid1, что я и искал, как показано ниже:

confid1
AACII1C1
AACII1C2

Теперь проблема в том, что один из столбцов в другой таблице связан с confid1 и confid2, но все это в одном столбце, но в нескольких строках.

Прямо сейчас я попытался использовать тот же метод UNION, просто добавив pdbcode в код, как показано ниже:

(SELECT confid1 as id1, conformer.pdbcode from dyndomrun, conformer where dyndomrun.confid1 = conformer.id)
UNION
(SELECT confid2 as id2, conformer.pdbcode from dyndomrun, conformer where dyndomrun.confid1 = conformer.id)

И он возвращает повторяющиеся значения "pdbcode", когда это не предполагается, как показано ниже:

confid1,    pdbcode
AACII1C1    2a4n
AACII1C2    2a4n

Я хочу выбрать и вернуть столбец pdbcode, относящийся к confid1 и confid2, как показано ниже:

confid1,    pdbcode
AACII1C1    2a4n
AACII1C2    1b87

Ответы [ 4 ]

1 голос
/ 27 декабря 2011

Вы можете сделать интервал с условиями соединения:

select  *
from    dyndomrun ddr
join    conformer as c
on      c.id in (ddr.confid1, ddr.confid2)

В качестве альтернативы, вы можете переместить объединение в подзапрос и присоединить его ко второй таблице:

select  *
from    (
        select  confid1 as confid
        from    dyndomrun
        union all
        select  confid2 
        from    dyndomrun
        ) as ddr
join    conformer as c
on      c.id = ddr.confid
1 голос
/ 27 декабря 2011

Измените ваше второе JOIN, чтобы соответствовать, используя confid2?

(SELECT confid1 as id1, conformer.pdbcode 
from dyndomrun JOIN conformer 
           ON dyndomrun.confid1 = conformer.id)
UNION
(SELECT confid2 as id2, conformer.pdbcode 
 from dyndomrun JOIN conformer 
           ON dyndomrun.confid2 = conformer.id)

Примечание: обновлен для использования явного синтаксиса JOIN

1 голос
/ 27 декабря 2011
(SELECT confid1 as id1, conformer.pdbcode from dyndomrun, conformer where dyndomrun.confid1 = conformer.id)
UNION
(SELECT confid2 as id2, conformer.pdbcode from dyndomrun, conformer where dyndomrun.confid2 = conformer.id)
0 голосов
/ 27 декабря 2011
SELECT A.confid1, B.pdbcode
FROM (  SELECT confid1 FROM dyndomrun
        UNION
        SELECT confid2 FROM dyndomrun) A
LEFT JOIN conformer B
ON A.confid1 = B.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...