2016-06-02 4 views
-2

как заменить lieferanten_nr (из artikel) на имя (из lieferanten) без подзапросов и соединений?Заменить столбец в Oracle SQL

Мне нужно идентифицировать имя лектора и заменить lieferanten_nr из артикля по имени.

1.Table

select bezeichnung, lieferanten_nr from artikel; 

2.Table

select lieferanten_nr, name from lieferanten; 

enter image description here


вместо lieferanten_nr там должны быть имя

+1

Что значит точно? – SSD

+0

приведены некоторые примеры. вы имеете в виду обновление значений? – SSD

+0

'без подзапросов и объединений' - вы не можете. Вы должны каким-то образом присоединиться к двум таблицам либо путем объединения, либо с помощью коррелированного подзапроса. – MT0

ответ

2

Учитывая искусственные ограничения нет присоединяется или подзапросы это про ближайший я мог бы получить с помощью UNION (и при условии, что нет подзапросы не означает коррелированных подзапросов):

SELECT bezeichnung, 
     name 
FROM (
    SELECT bezeichnung, 
     LEAD(name) IGNORE NULLS OVER (PARTITION BY lieferanten_nr 
              ORDER BY name NULLS FIRST) AS name 
    FROM (
    SELECT lieferanten_nr, 
      bezeichnung, 
      NULL AS name 
    FROM artikel 
    UNION ALL 
    SELECT lieferanten_nr, 
      NULL, 
      name 
    FROM lieferanten 
) 
) 
WHERE bezeichnung IS NOT NULL 
AND name  IS NOT NULL; 

Если вы проигнорируете ограничение NO присоединяется, то он становится очень просто:

select a.bezeichnung, 
     l.name 
from artikel a 
     INNER JOIN 
     lieferanten l 
     ON (a.lieferanten_nr = l.lieferanten_nr); 
+0

Как я уже сказал, я придерживался мнения, что это не разрешает взаимосвязанные подзапросы, иначе вы начинаете отказываться от всего, и ответ на вопрос заканчивается тем, что он «невозможен». – MT0

+0

это не работает –

+0

@ HansBaum Как это не работает? – MT0

Смежные вопросы