【问题标题】:Forcing multiple JOINs强制多个 JOIN
【发布时间】:2013-07-24 14:52:52
【问题描述】:

我有一个 CASE_MEMBER 表,其中每个案例成员都有一行,还有一个字段来指示成员在案例中的角色。假设角色“父母”和角色“孩子”。

在 Universe 中,我添加了 CASE_MEMBER 表,并创建了一个 Parent 对象和 Child 对象,每个对象都包含一个 WHERE 语句,该语句指定角色字段的正确值。

现在,如果我尝试使用这两个对象创建报告,它将只加入 CASE_MEMBER 一次,条件为“where role = 'Parent' and role = 'Child'”,这显然是不可能的。

所以我需要为每个成员类型强制查询加入 CASE_MEMBER 一次。是通过创建 CASE_MEMBER 的多个别名来做到这一点的唯一方法吗?或者是否有其他方法可以让我的 Universe 结构看起来干净且更类似于实际数据模型?

【问题讨论】:

    标签: business-objects


    【解决方案1】:

    创建 CASE_MEMBER 的别名,并在联接中包含 WHERE 条件。所以你的加入将是:

    对于 CASE_MEMBER 到 DEMOGRAPHICS:

    case_member.member = demographics.memberid and case_member.role='child'

    对于 CASE_MEMBER 到 DEMOGRAPHICS_PARENT(DEMOGRAPHICS 的别名):

    case_member.member = demographics_parent.memberid and case_member.role='parent'

    假设您创建(使用其他问题中的字段名称)、来自 case_member.caseid 的“案例 ID”对象、来自人口统计.ssn 的“儿童 SSN”和来自人口统计_父母.ssn 的“父 SSN”。创建包含所有这三个对象的报告将产生:

    SELECT
       case_member.caseid,
       demographics.ssn,
       demographics_parent.ssn
    FROM
       case_member,
       demographics,
       demographics demographics_parent
    WHERE
       (case_member.member = demographics.memberid 
            and case_member.role='child')
       (and case_member.member = demographics_parent.memberid 
            and case_member.role='parent')
    

    这应该产生你想要的。

    请注意,在此示例中,由于我们同时包含子表和父表,因此我们将在结果集中获得两行。一种带有空白的子 SSN,另一种带有空白的父 SSN。为避免这种情况,您需要在每个对象周围放置一个 max()。

    【讨论】:

    • 感谢您在这些方面的帮助,我显然是这方面的新手。
    • @brydgesk 没问题,我们都去过!
    猜你喜欢
    • 1970-01-01
    • 2011-06-17
    • 2012-07-22
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多