2014-01-24 5 views
0

я следующие две таблицы:Oracle SQL заменить ID столбец с именем

именование таблиц

M_ID  Name 
---------------- 
1  apple 
2  orange 
3  pear 

mapping_table

M_ID_1 M_ID_2 
------------------ 
    1   2 
    3   1 
    2   3 

Как сделать вывод, подобный тому, что ???? ?? Я использую оракул 11g.

Name1  Name2 
---------------- 
apple  orange 
pear  apple 
orange  pear 

ответ

1

Нечто подобное, казалось бы, что вы после

SELECT n1.name name1, 
     n2.name name2 
    FROM mapping_table m 
     JOIN name_table n1 
     ON(m.m_id_1 = n1.m_id) 
     JOIN name_table n2 
     ON(n.m_id_2 = n2.m_id) 
0

Попробуйте, как это,

SELECT a.name name1, b.name name2 
FROM naming_table A, 
     naming_table B, 
     mapping_table c 
WHERE A.m_id = c.m_id_1 
AND b.m_id = c.m_id_2; 
0

Запрос

with tab(M_ID, Name) as 
(select 1,'apple' from dual union all 
select 2,'orange' from dual union all 
select 3,'pear' from dual), 
tab2(M_ID_1, M_ID_2) as 
(select 1,2 from dual union all 
select 3,1 from dual union all 
select 2,3 from dual) 
---- 
--End of data 
---- 
select (select name from tab where m_id = M_ID_1) M_ID_1, 
     (select name from tab where m_id = M_ID_2) M_ID_2 
    from tab2; 

Выход:

| M_ID_1 | M_ID_2 | 
|--------|--------| 
| apple | orange | 
| pear | apple | 
| orange | pear | 
+0

вам не нужно с п ... это один слишком сложна для простого требования. –

+1

С помощью предложения используется для создания данных образца, фактический запрос существует после строки «Конец данных». – San

1

Попробуйте этот запрос:

SELECT (SELECT n.name 
     FROM name_table n 
     WHERE m.m_id_1 = n.m_id) name1, 
     (SELECT n.name 
     FROM name_table n 
     WHERE m.m_id_2 = n.m_id) name2 
FROM mapping_table m; 
Смежные вопросы