oracle SQL - отключить - PullRequest
       11

oracle SQL - отключить

0 голосов
/ 02 апреля 2020

Можете ли вы сказать мне, почему это не сработает?:)

    select *
from( select r.region_id, c.country_id
from countries c join regions r on r.region_id = c.region_id)
unpivot(
    valuee for columnValue in (r.region_id))

ORA-01748: здесь разрешены только простые имена столбцов 01748. 00000 - "здесь разрешены только простые имена столбцов"

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

С этой частью:

select *

Вы выбираете столбцы: region_id и country_id из своего внутреннего выбора. Таким образом, вам не нужно r.region_id в разделе UNPIVOT, только region_id. Этот код правильный (без ошибок):

select *
from(select r.region_id
            , c.country_id
     from countries c 
     join regions r on r.region_id = c.region_id)
unpivot(valuee for columnValue in (region_id));
0 голосов
/ 02 апреля 2020

Ваш запрос странный, и не совсем понятно, чего вы пытаетесь достичь; но после исправления вашего кода @ VBoka вам на самом деле не нужно объединение (если у вас нет стран с несуществующими регионами) - вы можете сделать:

select *
from (
  select region_id, country_id
 from countries
)
unpivot(valuee for columnValue in (region_id));

Но вы можете получить тот же результат без разворота; с объединением, если у вас есть реальная причина для его включения:

select c.country_id, 'REGION_ID' as columnvalue, r.region_id as valuee
from countries c
join regions r on r.region_id = c.region_id;

или без объединения:

select country_id, 'REGION_ID' as columnvalue, region_id as valuee
from countries;

В любом случае вы получаете набор результатов с одной строкой для каждой страны.

...