【问题标题】:How to create flexible search query with UNION & IN operator?如何使用 UNION 和 IN 运算符创建灵活的搜索查询?
【发布时间】:2019-12-05 11:57:52
【问题描述】:

执行以下查询后,我从两个目录“catalogA”和“catalogB”中获取所有产品的 UNION 查询:

SELECT uniontable.PK, uniontable.creationtime AS TIMECREATED FROM
    (
       {{
          SELECT {p:mode},{p:brandno},{creationtime} AS creationtime FROM {Product AS p JOIN catalogversion AS cv ON
 {p:catalogversion}={cv:pk} JOIN catalog AS cat ON {p:catalog}={cat:pk}}
          WHERE {p.code} = '145' AND {cv:version}='Staged' AND {cat:id}='catalogA'
       }}
       UNION ALL
       {{
          SELECT {p:mode},{p:brandno},{creationtime} AS creationtime FROM {Product AS p JOIN catalogversion AS cv ON
 {p:catalogversion}={cv:pk} JOIN catalog AS cat ON {p:catalog}={cat:pk}}
          WHERE {p.code} = '123' AND {cv:version}='Staged' AND {cat:id}='catalogB'
       }}
    ) uniontable ORDERR BY TIMECREATED

我只需要来自 UNION 查询的 CatalogA 中的产品,所以我做了如下子查询,但它会引发错误。任何帮助将不胜感激?

查询 2:

SELECT uniontable.PK, uniontable.creationtime AS TIMECREATED FROM {Product AS p JOIN catalogversion AS cv ON
 {p:catalogversion}={cv:pk} JOIN catalog AS cat ON {p:catalog}={cat:pk}}
          WHERE {cv:version}='Staged' AND {cat:id}='catalogA' IN 
    (
       {{
          SELECT {p:mode},{p:brandno},{creationtime} AS creationtime FROM {Product AS p JOIN catalogversion AS cv ON
 {p:catalogversion}={cv:pk} JOIN catalog AS cat ON {p:catalog}={cat:pk}}
          WHERE {p.code} = '145' AND {cv:version}='Staged' AND {cat:id}='catalogA'
       }}
       UNION ALL
       {{
          SELECT {p:mode},{p:brandno},{creationtime} AS creationtime FROM {Product AS p JOIN catalogversion AS cv ON
 {p:catalogversion}={cv:pk} JOIN catalog AS cat ON {p:catalog}={cat:pk}}
          WHERE {p.code} = '123' AND {cv:version}='Staged' AND {cat:id}='catalogB'
       }}
    ) uniontable ORDERR BY TIMECREATED

【问题讨论】:

  • 只是我的理解,你为什么不直接通过查询产品表而不是UNION来获取数据。无论如何,让我根据你提到的场景来回答。

标签: hybris flexible-search


【解决方案1】:

你只需要用WHERE uniontable.catalog = 'catalogA'过滤临时表

喜欢

SELECT * FROM
(
   {{
      SELECT {p:pk},{p:mode},{p:brandno},{creationtime} AS creationtime, {cat:id} AS catalog 
      FROM {    Product AS p 
                JOIN catalogversion AS cv ON {p:catalogversion}={cv:pk} 
                JOIN catalog AS cat ON {p:catalog}={cat:pk}
            }
      WHERE {p.code} = '145' AND {cv:version}='Staged' AND {cat:id}='catalogA'
   }}
   UNION ALL
   {{
      SELECT {p:pk},{p:mode},{p:brandno},{creationtime} AS creationtime, {cat:id} AS catalog  
      FROM {    Product AS p 
                JOIN catalogversion AS cv ON {p:catalogversion}={cv:pk} 
                JOIN catalog AS cat ON {p:catalog}={cat:pk}
            }
      WHERE {p.code} = '123' AND {cv:version}='Staged' AND {cat:id}='catalogB'
   }}
) as uniontable WHERE uniontable.catalog = 'catalogA' ORDERR BY uniontable.creationtime

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 2022-11-29
    • 2017-09-14
    • 2019-10-27
    • 2018-01-10
    相关资源
    最近更新 更多