【问题标题】:Flexible Search Query UNION灵活的搜索查询 UNION
【发布时间】:2019-10-24 08:12:01
【问题描述】:

我想在这个查询中添加一个 UNION ,我应该把任何 UNION (不管 UNION 的代码,我只想知道我可以把它放在哪里)在下面的灵活搜索查询中(我不熟悉语法)

   SELECT DISTINCT {o:pk} FROM 
( 
    {{ 
        SELECT 
            MAX({h.startTime}) AS startTime 
        FROM {CronJobHistory AS h JOIN CronJobResult AS r ON {h.result} = {r.pk} } 
        WHERE {h.cronJobCode} = 'ordersCronJob' AND {r.code} = 'SUCCESS' 
    }} 
) LAST, 
( 
    {{ 
        SELECT 
            MAX({h.startTime}) AS startTime 
        FROM {CronJobHistory as h} 
        WHERE {h.cronJobCode} = 'ordersCronJob' 
    }} 
) CURRENT, {Order       AS o 
       JOIN PaymentMode AS pm ON {pm.pk} = {o:paymentMode} 
       JOIN BaseStore AS b ON {o.store} = {b.PK} 
       JOIN OrderProcess AS op ON {o.pk} = {op.order}
    } 
WHERE (({pm:code} != 'asm'  AND  {op:creationtime} > LAST.startTime        AND {op:creationtime} <= CURRENT.startTime) 
    OR ({pm:code} =  'asm'  AND  {o:asmActivationTime} > LAST.startTime   AND {o:asmActivationTime} <= CURRENT.startTime) )  
    AND {o:originalVersion} IS NULL 
    AND 'rows-eu,rows-es' LIKE CONCAT( '%', CONCAT( {b.uid} , '%' ) ) 
AND {op.processDefinitionName} LIKE 'order-process%'

我试过把它放在最后一行,但它没有编译。

有什么提示吗?

【问题讨论】:

    标签: sql hybris flexible-search


    【解决方案1】:

    对于 UNION 查询或 INNER 查询,您需要将各自的查询用双花括号括起来。

    {{..query1..}} UNION {{..query2..}}
    

    查看下面的示例以获取灵活的查询联合示例。

    SELECT uniontable.PK, uniontable.CODE FROM
    (
       {{
          SELECT {c:PK} as PK, {c:code} AS CODE FROM {Chapter AS c}
          WHERE {c:PUBLICATION} LIKE ?pk
       }}
       UNION ALL
       {{
          SELECT {p:PK} as PK, {p:code} AS CODE FROM {Page AS p}
          WHERE {p:PUBLICATION} LIKE ?pk
       }}
    ) uniontable
    

    您可以在以下位置找到 FlexibleSearch 提示和技巧 https://help.sap.com/viewer/d0224eca81e249cb821f2cdf45a82ace/1905/en-US/8bc36ba986691014b48be171221d1f4f.html

    希望对你有帮助!

    修正了查询的前半部分...

      SELECT tbl.startTime FROM 
    ( 
        {{ 
            SELECT 
                MAX({h.startTime}) AS startTime 
            FROM {CronJobHistory AS h JOIN CronJobResult AS r ON {h.result} = {r.pk} } 
            WHERE {h.cronJobCode} = 'ordersCronJob' AND {r.code} = 'SUCCESS' 
        }} 
     UNION 
    
        {{ 
            SELECT 
                MAX({h.startTime}) AS startTime 
            FROM {CronJobHistory as h} 
            WHERE {h.cronJobCode} = 'ordersCronJob' 
        }} 
    ) tbl
    

    【讨论】:

    • 感谢您提供的信息。如果我想将之前的查询与自身结合起来会怎样?我试过但它没有编译?
    • 我不确定您的查询是否真的需要 UNION。我可以看到您正在尝试创建两列,即 LAST 和 CURRENT。您能解释一下您正在尝试构建的用例吗?
    • 我已经阅读了两次你的答案,我解决了这个问题。感谢 HybrixCX!
    • 很高兴你解决了它。同时,我通过对查询的前半部分应用修复来更新答案。 :)
    猜你喜欢
    • 2022-11-29
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多