Как написать SQL join, чтобы найти описание id с помощью Oracle? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть 2 входные таблицы, и мне нужен вывод в строковом формате.

enter image description here

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

with 
cte1 as --table 1
(select 1 as id , 'A' as abc from dual
union
select 2 as id , 'B' as abc from dual
union
select 3 as id , 'C' as abc from dual
union
select 4 as id , 'D' as abc from dual
union
select 5 as id , 'E' as abc from dual
union
select 6 as id , 'F' as abc from dual
),
cte2 as --table2
(select 1 as id, 3 as name from dual
union
select 1 as id, 5 as name from dual
union
select 1 as id, 4 as name from dual
union
select 2 as id, 3 as name from dual
union
select 2 as id, 6 as name from dual
)
SELECT e.id, e.abc, m.id as mgr, e.abc, c.*
FROM
    cte1 e, cte2 m, cte2 c
WHERE e.id = m.id
and 
e.id=c.name;

1 Ответ

3 голосов
/ 29 апреля 2019

Вы пытаетесь соединить каждую строку в таблице 1 с двумя строками в таблице 2, и оба условия никогда не могут быть истинными.

Вы хотите соединить каждую строку в таблице 2 с двумя строками в таблице 1:

SELECT e.abc, m.abc
FROM cte2 c, cte1 e, cte1 m
WHERE e.id = c.id
AND m.id = c.name
ORDER BY c.id, c.name;

A A
- -
A C
A D
A E
B C
B F

или с «современным» синтаксисом соединения, который вы действительно должны использовать:

SELECT e.abc, m.abc
FROM cte2 c
JOIN cte1 e ON e.id = c.id
JOIN cte1 m ON m.id = c.name
ORDER BY c.id, c.name;

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