SAP Hybris FlexibleSearch 示例

相关资料

SAP HYBRIS FlexibleSearc 语法

一、 基本SELECT语句

1.1. 带有否定操作符NOTSELECT语句

1.1.1. 获取 code 不为空的所有产品
SELECT {p.pk} FROM {Product AS p} WHERE {p.code} IS NOT NULL
1.1.2. 获取 code 不包含特定字符串的所有类别
SELECT {c:pk} FROM {Category AS c} WHERE {c:code} IS NOT LIKE '%test%'

1.2. 返回多列的SELECT语句

1.2.1. 获取所有类别的所有数据库列
SELECT * FROM {Category}
1.2.2. 获取类别上次修改的时间、codePK
SELECT {cat:modifiedtime}, {cat:code}, {cat:pk} FROM {Category AS cat}

1.3. 多个条件属性的SELECT语句

1.3.1. 获取codename包含特定字符串的所有产品
SELECT {p:PK}
    FROM {Product AS p}
    WHERE
        {p:code} LIKE '%myProduct'
        OR
        {p:name} LIKE '%myProduct'
    ORDER BY {p:code} ASC
1.3.2. 用作通配符
  • a% 查找以a开头的所有字符串,
  • %a 查找以a结尾的所有字符串,
  • %a% 查找包含a的所有字符串。
1.3.3. 补充:通过?占位符引入参数到查询中,可以搜索任何搜索字符串:
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:code} LIKE ?name
      OR {p:name} LIKE ?name
   ORDER BY {p:code} ASC
WHERE ... LIKE CONCAT('%', CONCAT(?name, '%'))
... LIKE ?name;
query.addQueryParameter("name", "%h%") 

1.4. 多语言的SELECT语句

1.4.1. 获取name列为null的所有产品
# 查询未明确指定语言,默认使用当前会话语言
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:name} IS NULL
1.4.2. 获取所有name列英语nulldescription列中文为null的产品
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:name[en]} IS NULL 
      OR {p:description[zh]} IS NULL
1.4.3. 同时搜索多种语言
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:description[zh]:o} LIKE '%text%' 
   OR {p:description[en]:o} LIKE '%text%'

# 添加`OR`子句以搜索其他属性或语言
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:description[zh]:o} LIKE '%text%'
   OR {p:description[en]:o} LIKE '%text%'
   OR {p:name[de]:o} LIKE '%text%'
   OR {p:description[fr]:o} LIKE '%text%'

1.5. 带参数的SELECT语句

1.5.1. 在FlexibleSearch语句中使用一个参数
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:description[en]:o} LIKE ?param
   OR {p:description[de]:o} LIKE ?param
   OR {p:description[fr]:o} LIKE ?param
1.5.2. 在FlexibleSearch语句中使用2个参数
# 获取至少属于以下两个类别之一的所有产品: 
SELECT {cpr:target}
   FROM {CategoryProductRelation AS cpr}
   WHERE {cpr:source} LIKE ?param1
      OR {cpr:source} LIKE ?param2
# 获取在两个日期之间更改的所有产品
SELECT {pk}
   FROM {Product}
   WHERE  {modifiedtime} >= ?startDate
      AND {modifiedtime} <= ?endDate

1.6. 带连接的SELECT语句

合并多个字符串

1.6.1. 用%括住搜索字符串
# 关于`CONCAT`操作符的示例
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:description[zh]} 
      LIKE CONCAT('%', CONCAT('myProduct','%'))
   ORDER BY {p:code} ASC
# 结合`?`占位符的示例
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:description[zh]} LIKE CONCAT('%',CONCAT(?param,'%'))
   ORDER BY {p:code}

1.7. 使用DISTINCT操作符的SELECT语句

清楚查询结果中的重复项

1.7.1. 清楚查询结果中的重复项
SELECT DISTINCT {cpr:target}
   FROM {CategoryProductRelation AS cpr}
   WHERE {cpr:source} LIKE ?param1
      OR {cpr:source} LIKE ?param2

1.8. 使用GROUP BY操作符SELECT语句

1.8.1. 获取每个产品订单行,并按产品分组
SELECT {oe:product}
    FROM {OrderEntry AS oe}
    GROUP BY {oe:product}

二、 子查询

2.1. 子查询语法

SELECT *
   FROM ${type}
   WHERE
   {{
      SELECT *
         FROM ${other_type}
         WHERE ${subselect_search_condition}
   }}

2.2. 对多种类型进行子选择

2.2.1 获得每一个直接或间接指定价格的产品
SELECT DISTINCT {p:PK}, {p:name}, {p:code}
FROM {Product AS p}
WHERE {p:PK} IN
    (
        {{
            -- subselect 1
            SELECT {dr:product} FROM {DiscountRow AS dr}
        }}
    )
    OR {p:PK} IN
    (
        {{
            -- subselect 2
            SELECT {prod:PK} 
            FROM {
                Product AS prod
                LEFT JOIN DiscountRow AS dr ON {prod:Europe1PriceFactory_PDG} = {dr:pg}
            }
            WHERE {prod:Europe1PriceFactory_PDG} IS NOT NULL
        }}
    )
ORDER BY {p:name} ASC, {p:code} ASC
2.2.2 获得至少属于3个类别的所有产品
SELECT {p:PK}
FROM {Product AS p}
WHERE {p:PK} IN
    (
        -- subselect 1
        SELECT prod
        FROM
        (
            {{
                -- subselect 2
                SELECT {cpr:target} AS prod, count({cpr:target}) AS howmany
                FROM {CategoryProductRelation AS cpr}
                GROUP BY {cpr:target}
            }}
        ) temptable
        WHERE howmany > 3
   )
ORDER BY {p:name} ASC, {p:code} ASC
2.2.3 结合?占位符的示例
SELECT {p:PK}
FROM {Product AS p}
WHERE {p:PK} IN
    (
        -- subselect 1
        SELECT prod
        FROM
        (
            {{
                -- subselect 2
                SELECT {cpr:target} AS prod, count({cpr:target}) AS howmany
                FROM {CategoryProductRelation AS cpr}
                GROUP BY {cpr:target}
            }}
        ) temptable
        WHERE howmany > ?number
   )
ORDER BY {p:name} ASC, {p:code} ASC

2.3. 使用参数进行子选择

2.3.1 在指定日期和指定时间之后被订购所有产品
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:PK} IN
   ( 
      {{
         -- subselect 1
         SELECT DISTINCT {oe:product}
            FROM {OrderEntry AS oe}
            WHERE {oe:order} IN
            ( 
               {{
                  -- subselect 2
                  SELECT {o:PK}
                     FROM {Order AS o}
                     WHERE {o:date} >= ?date 
               }}
            )
      }}
   )
2.3.2 获取指定货币中没有标价的产品
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:PK} NOT IN
   (
      {{
         -- subselect
         SELECT {pr:product}
            FROM {PriceRow AS pr}
            WHERE {pr:currency} = ?currency
      }}
   )
   ORDER BY {p:name} ASC, {p:code} ASC
   
# 也可以用 不存在`NOT EXISTS`
SELECT {p:PK}
   FROM {Product AS p}
   WHERE {p:PK} NOT EXISTS
   (
      {{
         -- subselect
         SELECT {pr:product}
            FROM {PriceRow AS pr}
            WHERE {pr:currency} = ?currency
      }}
   )
   ORDER BY {p:name} ASC, {p:code} ASC
使用FROM子句和SQL聚合函数并带有子查询的报表查询
SELECT AVG(torderentries.totprice), AVG(torderentries.totquantity)
    FROM 
    (
       {{ 
          SELECT SUM({totalPrice}) AS totprice, SUM({quantity}) AS totquantity
          FROM {OrderEntry} 
          WHERE {creationtime} >= ?startDate 
              AND {creationtime} < ?endDate 
          GROUP BY {order}
       }}
    ) AS torderentries

2.4. 将SELECT语句与UNION操作符组合在一起

UNION操作符用于合并两个或多个SELECT语句的结果集。

2.4.1. 语法
SELECT x.PK
FROM
(
    {{
        SELECT {PK} AS PK FROM {Chapter}
        WHERE {Chapter.PUBLICATION} LIKE 6587084167216798848
    }}
UNION ALL
    {{
        SELECT {PK} AS PK FROM {Page}
        WHERE {Page.PUBLICATION} LIKE 6587084167216798848
    }}
) x
2.4.1 获取订单的所有支付金额
SELECT result.orderid, result.name, result.amount
FROM
(
    {{
        SELECT {o.orderid} AS orderid, {op.payname} AS name, {op.payAmount} AS amount
        FROM 
            { 
                OrderPayType AS op JOIN Order AS o ON {op.order ={o.pk}
            }
        WHERE {o.orderid} = '10001'
    }}
UNION
    {{
        SELECT {o.orderid} AS orderid, {opi.name} AS name, {opi.promotionAmount} AS amount
        FROM 
            {
                OrderPromotionInfo AS opi
                JOIN order AS o ON {o.pk}={opi.order}
            }
        WHERE {o.orderid} = '10001'
    }}
) result
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351