创建 ORACLE 查询 - 查看并使用默认值合并

Create an ORACLE query - View and union with default value

对于特定需求,我想通过合并多个 table 中的数据并默认添加数据来创建视图。

更多详情:

我的数据库中有 3 个 table:

对于每个合约,可以添加一个或多个具有特定预算的投资组合(在链接 table 中可见)。

合约(来自合约 table)可能不包含投资组合。因此,该合约不存在于链接 table

我需要创建一个视图以生成一个 table 包含:

来自链接 table 的行和链接到所有投资组合的所有行(对于其他合约)以获得例如:

来自链接的行 table

id_contract: 1 - id_portfolio: 1 - value:500

id_contract: 1 - id_portfolio: 2 - value:1500

id_contract: 2 - id_portfolio: 1 - value:1000

id_contract: 2 - id_portfolio: 2 - value:3000

id_contract: 3 - id_portfolio: 1 - value:5000

以及另一个案例中的台词

id_contract: 3 - id_portfolio: 2 - value:0

id_contract: 4 - id_portfolio: 1 - value:0

id_contract: 4 - id_portfolio: 2 - value:0

id_contract: 5 - id_portfolio: 1 - value:0

id_contract: 5 - id_portfolio: 2 - value:0

我不知道在oracle中怎么写。 我知道创建视图的代码和查询的第一步。在我认为我必须对查询的第二部分执行 UNION 之后。

尽管如此,我不知道第二部分该怎么做(为每个预算默认值为 0 的投资组合添加链接 table 中不存在的每个合约的行)

你能帮我做一下吗?

非常感谢,

塞布

如果我没理解错的话,你想要 all 合约和投资组合的组合,无论组合是否存在于 link table 中?如果 link table 中存在组合,则显示 link 中的预算值,否则显示零作为预算值?

然后你可以用 CROSS JOIN 代替 UNION ALL 来获得所有可能的组合,然后你 LEFT OUTER JOIN 到 link table。像这样:

select c.id_contract
     , p.id_pfo
     , nvl(l.budget,0) value
  from contracts c
 cross join portfolios p
  left outer join "contract_Linked_pfo" l
      on l.id_contract = c.id_contract
     and l.id_pfo = p.id_pfo
;

(我假设您的 link table 是大小写混合标识符,因为您在问题中是这样写的。如果不是这种情况,请删除引号 ;-)