Mysql 使用JSON_EXTRACT对SQL语句使用multiple HAVING子句
我将MYSQL 6.x与JSON函数一起使用,并尝试使用以下查询来限制记录集的位置-有一个名为properties的列,它是JSON列,我需要对该JSON数据执行多个条件的搜索Mysql 使用JSON_EXTRACT对SQL语句使用multiple HAVING子句,mysql,sql,json,where-clause,having-clause,Mysql,Sql,Json,Where Clause,Having Clause,我将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 HAVIN
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" |
+------------+---------------+
如何执行上面相同的查询以仅返回具有以下条件的行
13、134中的标识符和工作流类型='rule'
由于MySQL似乎不允许多个HAVING条件,我如何修改我的查询来实现这一点呢?您肯定可以在HAVING子句中包含多个条件,而不是多个HAVING子句: 但我并不建议用这种方式来表达这个问题;实际上,您依赖于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做谓词下推,并在后台为你优化它:
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
不相关,但是:没有MYSQL 6.x这样的东西,它们从5.7跳到了8.0。
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