2012-01-05 3 views
-2

У меня есть 3 таблицы, с которыми я соединяюсь, в которых 2 таблицы, которые я пересекаю.Case или If in where Условие в SYBASE ASE

Проблема заключается в внутреннем соединении, но некоторое время 1 условие может прийти NULL , поэтому я хочу поставить 1 NULL и 2-ое значение. пожалуйста просмотр запрос

`

select 
cr.id 
, cm.orgaparty_uri 
, cm.role_uri 
, am.orgaparty_uri 
, am.role_uri 
, gu.name_t 
, gu1.name_t 
from 
cdm_clientrelation cr 
,cdm_commercial_roles cm 
,cdm_commercial_roles am 
,gcl_user gu 
,gcl_user gu1 
where 
cm.agreement_uri ='cdm:clientRelation/'+cr.id 
and cm.role_uri ='gcl:role/CommercialManager' 
and cm.orgaparty_uri= 'gcl:user/'+gu.id 
AND am.agreement_uri='cdm:clientRelation/'+cr.id 
AND am.role_uri='gcl:role/AdministrativeManager' 
AND am.orgaparty_uri = 'gcl:user/'+gu1.id` 

некоторое время может быть возможно, что либо один из ряда не существует в таблице cdm_commercial_roles для коммерческих или роли администратора. поэтому он не получит его и внутреннее соединение не в состоянии , но мне нужно, если строка не существует, это даст, как NULL, как мой выберите Заявление имя ожидающей ур ответ

+0

Мое предложение не использовать синтаксис соединения старого стиля и использовать более современный внутренний и внешний синтаксис соединения - я предполагаю, что ASE поддерживает это. –

ответ

0

Если вы хотите, чтобы линии, которые будут показаны, когда ISN» t соответствие между всеми таблицами вы можете LEFT OUTER JOIN решить вашу проблему.


В результате левое внешнее соединение (или просто оставили присоединиться) для таблицы A и B всегда содержит все записи «левого» таблицы (А), даже если нарисуй условие делает не найти подходящую запись в таблице «справа» (B). Это означает, что если предложение ON соответствует 0 (ноль) записей в B, , соединение по-прежнему будет возвращать строку в результате, но с NULL в каждом столбце из B. Это означает, что левое внешнее соединение возвращает все значения из левой таблицы, а также совпадающие значения из правой таблицы (или NULL в случае отсутствия совпадающего предиката соединения). Если правая таблица возвращает одну строку, а левая таблица возвращает более одной соответствующей строки для нее, значения в правой таблице будут повторяться для каждой отдельной строки в таблице . Начиная с Oracle 9i, может использоваться оператор LEFT OUTER JOIN, а также (+).