Oracle SQL选择问题

Oracle SQL选择问题,sql,oracle,Sql,Oracle,我有一个有利益相关者的系统。系统可以有业务数据所有者,也可以有技术数据所有者,两者都有,或者两者都没有。有一个SystemToOwner关系表,它保存系统和干系人的id,并指定干系人的角色(业务与技术)。角色实际上是一个外键,它驻留在一个包含各种角色的表中。我希望从多个表中选择一些信息并将其放入报告中。我为每个系统的业务干系人和技术干系人写了一个专栏。我的问题是,使用当前代码,如果同时存在业务和技术数据所有者,我会得到两行,一行填写业务数据,技术数据为空,另一行填写技术数据,技术数据为空。我怎样

我有一个有利益相关者的系统。系统可以有业务数据所有者,也可以有技术数据所有者,两者都有,或者两者都没有。有一个SystemToOwner关系表,它保存系统和干系人的id,并指定干系人的角色(业务与技术)。角色实际上是一个外键,它驻留在一个包含各种角色的表中。我希望从多个表中选择一些信息并将其放入报告中。我为每个系统的业务干系人和技术干系人写了一个专栏。我的问题是,使用当前代码,如果同时存在业务和技术数据所有者,我会得到两行,一行填写业务数据,技术数据为空,另一行填写技术数据,技术数据为空。我怎样才能让这成为一个条目

SELECT  system.name "System"
,system.definition "Definition"
,CASE WHEN role.name LIKE 'Business%' THEN nvl2(stk.last_name,stk.last_name || ', ' || stk.first_name, null)ELSE NULL END  "Bus Data Steward"
,CASE WHEN role.name LIKE 'Technical%' THEN nvl2(stk.last_name,stk.last_name || ', ' || stk.first_name, null) ELSE NULL END "Tech Data Steward"
FROM
    system
LEFT JOIN  relationship ON system.element_id = relationship.system
LEFT JOIN  stk ON relationship.stakeholder = stk.element_id
LEFT JOIN  role on relationship.role = role.element_id

应使用将角色筛选为一个或另一个的子查询,两次联接角色表:

SELECT * FROM
system
LEFT JOIN  (
  SELECT relationship.system, stk.last_name, stk.firstname, role.name 
  FROM relationship
    INNER JOIN  stk ON relationship.stakeholder = stk.element_id
    INNER JOIN  role on relationship.role = role.element_id WHERE role.name like 'Business%'
) as role_biz 
ON system.element_id = role_biz.system

LEFT JOIN  (
  SELECT relationship.system, stk.last_name, stk.firstname, role.name 
  FROM relationship
    INNER JOIN  stk ON relationship.stakeholder = stk.element_id
    INNER JOIN  role on relationship.role = role.element_id WHERE role.name like 'Technical%'
) as role_tec 
ON system.element_id = role_tec.system

应使用将角色筛选为一个或另一个的子查询,两次联接角色表:

SELECT * FROM
system
LEFT JOIN  (
  SELECT relationship.system, stk.last_name, stk.firstname, role.name 
  FROM relationship
    INNER JOIN  stk ON relationship.stakeholder = stk.element_id
    INNER JOIN  role on relationship.role = role.element_id WHERE role.name like 'Business%'
) as role_biz 
ON system.element_id = role_biz.system

LEFT JOIN  (
  SELECT relationship.system, stk.last_name, stk.firstname, role.name 
  FROM relationship
    INNER JOIN  stk ON relationship.stakeholder = stk.element_id
    INNER JOIN  role on relationship.role = role.element_id WHERE role.name like 'Technical%'
) as role_tec 
ON system.element_id = role_tec.system

对我来说,这会导致ORA-00905缺少关键字错误。事实上,这涉及到更多的专栏,但即使我在问题/你的答案中尝试了这一小部分,我仍然能理解。我假设这是因为“as”关键字的缘故?如果没有它,我会得到一个表不存在的错误,所以可能我错了。对我来说,这会导致ORA-00905缺少关键字错误。事实上,这涉及到更多的专栏,但即使我在问题/你的答案中尝试了这一小部分,我仍然能理解。我假设这是因为“as”关键字的缘故?如果没有它,我会得到一个不存在错误的表,所以可能我错了。