如何将完整外连接查询转换为O-R查询?

时间:2010-06-08 02:54:38

标签: sql oracle

我正在将关系数据库转换为Oracle中的对象关系。

我有一个使用旧外连接的查询。

是否可以在没有明确使用完全外连接的情况下为O-R数据库编写相同的查询?

对于普通的内部连接,它很简单,我只使用点符号和ref / deref。

我对此感兴趣所以让我们说关系查询是:

select a.attr, b.attr from a full outer join b on (a.fk = b.pk);

我想知道这样做是否是个好主意:

select a.attr, b.attr from a_obj a full outer join b_obj b on (a.b_ref = ref(b));

1 个答案:

答案 0 :(得分:3)

假设我有实体的“销售历史”和“销售预测”。对于给定的产品和期间,我希望看到实际销售与预测销售。但是,任何给定的时间段可能没有预测或实际销售,所以我使用SQL:

SELECT NVL(f.product_id, h.product_id), NVL(f.period, h.period), 
       f.forecast_sale, h.actual_sale
FROM forecast f 
FULL OUTER JOIN history h ON h.product_id = f.product_id and h.period = f.period

基本上我在一个公共密钥上加入两个子表。完全外连接在关系数据库中很少见,因为规范化通常会将实体与公共密钥合并。左外连接和右外连接更常见,因为典型的用例是选择父项及其子项,即使父项没有子项也需要行。

因此,如果你有一个完整的外连接,首先要检查的是数据结构是否正确。

对象模型中的数据结构是固定的或“预先连接”的。如果模型中的数据结构不容易支持某个结果集的生成,那么你几乎不需要(或者至少编写很多功能来手动提取和加入数据)。

如果您发布有关相关数据结构的一些详细信息,建议可能会更精确。