使用 JSON_EXTRACT 在 SQL 语句上使用多个 HAVING 子句
Using multiple HAVING clause on SQL statement using JSON_EXTRACT
我正在使用 MYSQL 6.x 和 JSON 函数,并有以下查询,我试图使用 WHERE 或 HAVING 来限制记录集 - 有一个名为 properties
是 JSON 列,我需要在这个 json 数据
上执行多个条件的搜索
SELECT JSON_EXTRACT(properties,'$.identifier') AS identifier,
JSON_EXTRACT(properties,'$.workflow_type') AS workflow_type
FROM workflow_pages HAVING workflow_type;
这return是以下数据:-
+------------+---------------+
| identifier | workflow_type |
+------------+---------------+
| 9 | "dictionary" |
| 13 | "dictionary" |
| 11 | "dictionary" |
| 13 | "rule" |
| 134 | "rule" |
+------------+---------------+
如何仅对 return 具有以下条件的行执行上面的相同查询
identifier IN 13, 134
和 workflow_type = 'rule'
我该如何修改我的查询来执行此操作,因为它似乎 MySQL 不允许多个 HAVING 条件
你肯定可以在 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 做谓词下推并在后台为你优化它):
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 和 JSON 函数,并有以下查询,我试图使用 WHERE 或 HAVING 来限制记录集 - 有一个名为 properties
是 JSON 列,我需要在这个 json 数据
SELECT JSON_EXTRACT(properties,'$.identifier') AS identifier,
JSON_EXTRACT(properties,'$.workflow_type') AS workflow_type
FROM workflow_pages HAVING workflow_type;
这return是以下数据:-
+------------+---------------+
| identifier | workflow_type |
+------------+---------------+
| 9 | "dictionary" |
| 13 | "dictionary" |
| 11 | "dictionary" |
| 13 | "rule" |
| 134 | "rule" |
+------------+---------------+
如何仅对 return 具有以下条件的行执行上面的相同查询
identifier IN 13, 134
和 workflow_type = 'rule'
我该如何修改我的查询来执行此操作,因为它似乎 MySQL 不允许多个 HAVING 条件
你肯定可以在 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 做谓词下推并在后台为你优化它):
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