непросто (для меня) nvl

Newton
Дата: 30.10.2015 07:26:05
Добрый день уважаемые форумчане!

Сразу скажу не программист, не разработчик баз данных, просто встала задача базюку собрать для отчета одного.
Столкнулся с одной проблемкой, которую примерно могу решить топорно. Есть табличка со столбцом, скажем А, и там есть пропущенные коды товаров. Чтобы заполнить пропущенные, я делил эту табличку на два, А1 с полными данными, А2 с пропущенными. В А2 тянул с В эти пропущенные данные. И потом соединял А1 и А2. Очевидно что это Bad practice. Сначало подумал можно было бы через case when А.col is null и тд подтянуть через еще один select. Но потом вспомнил что есть такая функция nvl. Вопрос как написать правильный select через nvl?

select nvl(A.col, (select B.col from A left join B on B.col = A.col)) as col from A


Ну никак не могу по поиску что то похожее найти на русском или на английском. Select этот возвращает более одной строки, а мне надо конкретное значение col по id.

Извиняюсь, если как то смутно донес. Пытался как можно яснее изложить.

Спасибо
bzzzz
Дата: 30.10.2015 07:37:53
Newton,

select nvl(A.col, B.col) as col
from A
  left join B on B.col = A.col
Newton
Дата: 30.10.2015 08:10:03
bzzzz,

спасибо. все просто оказалось. интересно это корректно сработает в объемном запросе с десятью джойнами
ю. синг
Дата: 30.10.2015 08:39:12
bzzzz
select nvl(A.col, B.col) as col
from A
  left join B on B.col = A.col
nvl-то тут зачем? а в случае уникальности b.col, то и джоин на результат не влияет