Страница 1 из 1

direct sql inner join, left join

Добавлено: 10 дек 2012, 18:05
mwoland
Задача: с помощью direct sql вытащить ДО и их внешние атрибуты. Есть запрос вида

Код: Выделить всё

sql select bd.nodoc, av.vstring
from basedoc bd 
join attrval av on 1102 = av.wtable and bd.nrec = av.crec and #comp(0001000000000ECh) = av.cattrnam ;
Запрос работает, но выводит только те ДО, у которых указан необходимый внешний атрибут. Чтобы выводились ДО и с установленным атрибутом и без него вместо join использую left join. Запрос выводит все ДО, но отображает пустые значения в av.vstring (во всех строках. даже там, где значение внешнего атрибута есть). Помогите плз, может я не понимаю механизма действия left join? Вроде всегда в таком ключе его использовал, а сейчас затык.

Re: direct sql inner join, left join

Добавлено: 10 дек 2012, 18:29
Masygreen

Код: Выделить всё

left outer jon 
?

Re: direct sql inner join, left join

Добавлено: 10 дек 2012, 18:54
mwoland
Masygreen писал(а):

Код: Выделить всё

left outer jon 
?
пробовал - то же самое, что и left join

Re: direct sql inner join, left join

Добавлено: 10 дек 2012, 19:09
Den
Вам поможет COALESCE

Re: direct sql inner join, left join

Добавлено: 10 дек 2012, 19:14
mwoland
Всё. Разобрался. "Правильный" код:

Код: Выделить всё

sql select bd.nodoc, CASE WHEN av.vstring IS NULL THEN '' ELSE av.vstring END
from basedoc bd 
left join attrval av on 1102 = av.wtable and bd.nrec = av.crec and #comp(0001000000000ECh) = av.cattrnam ;
Т.е. ошибка была в отображении колонки. Это ****, господа. И ради этой фигни я убил сегодня кучу времени. Печаль и ненависть. Тему можно закрывать.

Re: direct sql inner join, left join

Добавлено: 10 дек 2012, 19:15
mwoland
Den писал(а):Вам поможет COALESCE
Да, вы правы COALESCE действительно поможет. Спасибо.

Re: direct sql inner join, left join

Добавлено: 10 дек 2012, 19:23
Den
уже тут обсуждали просто где то эту "фичу" dsql