将OUTER APPLY转换为Redshift

时间:2018-09-06 08:10:43

标签: sql amazon-redshift lateral-join

我有需要转换为Redshift的MSSQL Server脚本

这是脚本的一部分

 OUTER APPLY
        (
        SELECT  MAX(CASE WHEN ctt.codetagid = 7149 THEN Id ELSE 0 END) AS CslId,
                MAX(CASE WHEN ctt.codetagid = 9736 THEN Id ELSE 0 END) AS LearnId,
                MAX(CASE WHEN ctt.codetagid = 9735 THEN Id ELSE 0 END) AS PMId,
                MAX(CASE WHEN ctt.codetagid = 10299 THEN Id ELSE 0 END) AS UpSell
        FROM    public.billing_codes_custom_tag ctt 
        WHERE   ctt.customcodeid = bcc.id
                AND ctt.codetagid IN(7149,9736,9735,10299)
        ) AS codeLabel

我有错

  

'(',','、、、、、、、 ORDER,RIGHT,UNION,WHERE或'['预期为'OUTER'

在此行OUTER APPLY

我如何将这些东西转换为Redshift?

2 个答案:

答案 0 :(得分:1)

您将使用Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: expecting "all", found 'JOIN' near line 1, column 64 [SELECT child FROM com.example.Family3.domain.Child child FETCH JOIN child.family u WHERE u.id = :userId ] at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:296) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:188) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:595) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:704) ~[hibernate-core-5.3.5.Final.jar:5.3.5.Final] ... 9 common frames omitted 和聚合:

LEFT JOIN

答案 1 :(得分:0)

因为OUTER APPLY与LEFT JOIN相同

我这样重写它

LEFT JOIN
    (
    SELECT  MAX(CASE WHEN ctt.codetagid = 7149 THEN Id ELSE 0 END) AS CslId,
            MAX(CASE WHEN ctt.codetagid = 9736 THEN Id ELSE 0 END) AS LearnId,
            MAX(CASE WHEN ctt.codetagid = 9735 THEN Id ELSE 0 END) AS PMId,
            MAX(CASE WHEN ctt.codetagid = 10299 THEN Id ELSE 0 END) AS UpSell
    FROM    public.billing_codes_custom_tag ctt 
    WHERE   ctt.customcodeid = bcc.id
            AND ctt.codetagid IN(7149,9736,9735,10299)
    ) AS codeLabel