在sql语句上使用multiple having子句,使用json\u extract

qrjkbowd  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(293)

我正在使用mysql 6.x和json函数,并且有下面的查询,我正在尝试在何处使用或必须限制记录集-有一个名为 properties 这是json列,我需要对这个json数据执行多个条件的搜索

SELECT JSON_EXTRACT(properties,'$.identifier') AS identifier,
       JSON_EXTRACT(properties,'$.workflow_type') AS workflow_type
       FROM workflow_pages HAVING workflow_type;

这将返回以下数据:-

+------------+---------------+
| identifier | workflow_type |
+------------+---------------+
| 9          | "dictionary"  |
| 13         | "dictionary"  |
| 11         | "dictionary"  |
| 13         | "rule"        |
| 134        | "rule"        |
+------------+---------------+

如何执行上述相同的查询以仅返回具有以下条件的行 identifier IN 13, 134 以及 workflow_type = 'rule' 我如何修改我的查询来做到这一点,因为mysql似乎不允许多个having条件

6bc51xsx

6bc51xsx1#

你当然可以有多个条件 HAVING 从句(与多重从句相对) HAVING 条款):

SELECT 
    JSON_EXTRACT(properties,'$.identifier') AS identifier,
    JSON_EXTRACT(properties,'$.workflow_type') AS workflow_type
FROM workflow_pages 
HAVING workflow_type = 'rule' AND identifier IN (13, 134)

但我不建议用这种方式来表达这个问题;实际上,您依赖的是mysql对sql标准的扩展,该扩展允许在 HAVING 条款(且无 GROUP BY ),这使得查询在某些方面相当不清楚。我发现用一个普通的 WHERE 子句并重复以下表达式:

SELECT 
    JSON_EXTRACT(properties,'$.identifier') AS identifier,
    JSON_EXTRACT(properties,'$.workflow_type') AS workflow_type
FROM workflow_pages 
WHERE 
    JSON_EXTRACT(properties,'$.identifier') IN (12, 134)
    JSON_EXTRACT(properties,'$.workflow_type') = 'rule'

或者,如果你有很多条件,不想做所有的类型,你可以使用子查询(我希望mysql做 predicate 下推,并在引擎盖下为你优化它):

SELECT *
FROM (
    SELECT 
        JSON_EXTRACT(properties,'$.identifier') AS identifier,
        JSON_EXTRACT(properties,'$.workflow_type') AS workflow_type
    FROM workflow_pages 
) t
WHERE workflow_type = 'rule' AND identifier IN 13, 134

相关问题