Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用JSON_EXTRACT对SQL语句使用multiple HAVING子句_Mysql_Sql_Json_Where Clause_Having Clause - Fatal编程技术网

Mysql 使用JSON_EXTRACT对SQL语句使用multiple HAVING子句

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

我将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"        |
+------------+---------------+
如何执行上面相同的查询以仅返回具有以下条件的行 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