Case或If在SYBASE ASE中的Condition的位置

时间:2012-01-05 04:25:33

标签: sybase-ase

我有3张桌子,我加入了2张桌子,我正在加入。

问题是所有都是内连接,但有时候1条件可以变为NULL 所以我想把1 NULL和第二个值。 请参阅查询

`

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表中没有任何一行用于商业或管理员角色。所以它不会得到它和内部连接失败 但我需要如果Row不在那里,它会像我的select语句一样给出NULL 名称 等待你的回复

1 个答案:

答案 0 :(得分:0)

如果您希望在不是所有表格之间的对应关系时显示这些行,您可以LEFT OUTER JOIN来解决您的问题。


  

表A和表的左外连接(或简称左连接)的结果   B总是包含“左”表(A)的所有记录,即使是   join-condition在“右”表中找不到任何匹配的记录   (B)。这意味着如果ON子句匹配B中的0(零)记录,   连接仍会在结果中返回一行 - 但每个中都有NULL   来自B的列。这意味着左外连接返回所有   左表中的值加上右表中的匹配值   (如果没有匹配的连接谓词,则为NULL)。如果是正确的表   返回一行,左表返回多个匹配的行   对于它,右表中的值将重复   左表上的不同行。从Oracle 9i开始,LEFT OUTER   可以使用JOIN语句以及(+)。