【问题标题】:Conditional join for view entity of OFBizOFBiz视图实体的条件连接
【发布时间】:2013-04-09 18:57:21
【问题描述】:

我有两个表 emp 和 emp_attributes 其中我想有条件加入

员工

empno | ename  | location | salary
  1   | Josh   |    LA    |  1200
  2   | Joe    |    NY    |  1000
  3   | George |    LA    |  1500

emp_attributes

empno | attr_name  | attr_value
  1   | appraised  |    10%
  1   | basicSalary|    700
  2   | basicSalary|    600
  2   | appraised  |    12%
  2   | spouseName |   Amelia
  3   | appraised  |    25%
  3   | basicSalary|    700
  3   | spouseName |    Lucy

我想查看类似的查询

SELECT E.*, EA1.ATTR_VALUE AS APPRAISAL_RATE, EA2.ATTR_VALUE AS SPOUSE_NAME FROM EMP E
LEFT JOIN EMP_ATTRIBUTES EA1 ON E.EMPNO=EA1.EMPNO AND EA1.ATTR_NAME='appraised'
LEFT JOIN EMP_ATTRIBUTES EA2 ON E.EMPNO=EA2.EMPNO AND EA2.ATTR_NAME='spouseName';

Expected Output
empno | ename  | location | salary | APPRAISAL_RATE | SPOUSE_NAME
  1   | Josh   |    LA    |  1200  |      10%       |    NULL
  2   | Joe    |    NY    |  1000  |      12%       |   Amelia
  3   | George |    LA    |  1500  |      25%       |    Lucy

我试过了

<view-entity entity-name="EmpAndEmpAttributesAndEmpAttributes"
             package-name="com.proj.employee"
             title="Employee and Employee Attribute and Employee Attribute">
     <member-entity entity-alias="E" entity-name="Emp"/>
     <member-entity entity-alias="EA1" entity-name="EmpAttributes"/>
     <member-entity entity-alias="EA2" entity-name="EmpAttributes"/>

     <alias-all entity-alias="E"/>
     <alias-all entity-alias="EA1"/>
     <alias-all entity-alias="EA2"/>

    <view-link entity-alias="E" rel-entity-alias="EA1" rel-optional="true">
        <key-map field-name="empno"/>
    </view-link>
    <entity-condition>
        <condition-expr entity-alias="EA1" field-name="attrName" operator="equals" value="appraised" />
    </entity-condition>

    <view-link entity-alias="E" rel-entity-alias="EA2" rel-optional="true">
        <key-map field-name="empno"/>
    </view-link>
    <entity-condition>
        <condition-expr entity-alias="EA1" field-name="attrName" operator="equals" value="spouseName" />
    </entity-condition>
</view-entity>

有人告诉我我做错了什么吗?或任何其他方式来解决这个问题...

【问题讨论】:

    标签: entity-framework join left-join conditional-statements ofbiz


    【解决方案1】:

    条件应该放在“view-link”节点中,因为它不是“where”条件,而是“join”条件。

    <view-link entity-alias="E" rel-entity-alias="EA1" rel-optional="true">
        <key-map field-name="empno"/>
        <entity-condition>
            <condition-expr entity-alias="EA1" field-name="attrName" operator="equals" value="appraised" />
        </entity-condition>
    </view-link>
    

    【讨论】:

      【解决方案2】:

      看起来这是一个已知问题,在某些版本的 OFBiz 中,实体条件在视图链接中不起作用,请参阅:https://issues.apache.org/jira/browse/OFBIZ-4781

      您可以通过检查 GeneralDao.java 生成的实际 SQL 来确认这一点,我在尝试对动态视图实体执行相同操作时遇到了类似问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-02
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多