当一个表中没有值时,加入两个表

时间:2016-05-04 12:30:02

标签: oracle join

我有两个表,ROLE和ROLE_DESC。

ROLE看起来像这样。

PS_ROLE_SEQ  NUMBER,    
PS_SEQ       NUMBER,    
ROLE_TYPE            VARCHAR2(2 CHAR),    
SOURCE               VARCHAR2(128 CHAR)

ROLE_DESC看起来像这样。

ROLE_TYPE  VARCHAR2(2 CHAR),    
ROLE_NAME  VARCHAR2(16 CHAR)

如您所料,ROLE的ROLE_TYPE和ROLE_DESC的ROLE_TYPE互相引用。 ROLE_DESC中有三个实体,如下所示。

ROLE_TYPE   ROLE_NAME
A           Account
M           Manager
S           Sales

我想使用where子句为特定的PS_SEQ创建此字符串。

(Account + ":" + ROLE.SOURCE + "|" + Manager + ":" + ROLE.SOURCE + "|" + Sales + ":" + ROLE.SOURCE)

有时,ROLE表没有完整的ROLE_TYPE,例如,它只有Account和Manager。 在这种情况下,Sales的ROLE.SOURCE变为“”。 并且,ROLE_DESC是动态的,可以更改实体数量。

有什么方法可以轻易地查询这个吗?

2 个答案:

答案 0 :(得分:0)

你可以试试这个:

select ROLE_DESC.ROLE_TYPE, ROLE_DESC.ROLE_NAME, ROLE.SOURCE 
FROM ROLE_DESC
LEFT OUTER JOIN ROLE
ON (ROLE_DESC.role_type=ROLE.role_type and ROLE.PS_SEQ = 111)

答案 1 :(得分:0)

SELECT LISTAGG (role_name || ':' || source, '|') WITHIN GROUP (ORDER BY role_name)
  FROM (SELECT ROLE_DESC.ROLE_TYPE, ROLE_DESC.ROLE_NAME, ROLE.SOURCE
          FROM ROLE_DESC 
           LEFT OUTER JOIN ROLE 
           ON ROLE_DESC.role_type = ROLE.role_type AND ROLE.PS_SEQ = 111)