MYSQL - 在 WHERE IN 子句中使用数组

MYSQL - using array in WHERE IN clause

在 table 中有一个 json 数组列,例如[“A1”、“A2”、“B1”]。我想在 WHERE IN 子句中引用该数组。我无法将 json 数组计算为 ... WHERE tbl2.refID IN ("A1", "A2", "B1").

SET @ref = replace(replace('["A1", "A2", "BI"]','[', ''), ']', ''); SELECT @ref; returns “A1”、“A2”、“B1”,如我所愿,但无法在 ... WHERE tbl2.refID IN (@ref)

中工作

那么我如何计算要用作“WHERE IN”值的数组?

Table 1

id array of ids other cols
1 ["A1", "A2", "B1"]

Table 2

id refID col 3
1 A1 [ ]
2 A2 [ ]

使用 table1.col2 的元素我想 select 和 table2.

中的 col3 分组

希望我能更好地说明它!

我已尝试评估传递给 WHERE IN () 但未返回任何值的数组列。 评价莫名其妙就坏了。

WHERE tbl2.refID IN (replace(replace('["A1", "A2", "B1"]','[', ''), ']', '')); 未评估

如果该值存在 JSON_CONTAINS

,您可以在 JSON 中搜索

Example

注意,JSON_CONTAINS 需要两个参数的有效 JSON,因此 JSON_CONTAINS('["A1"]', 'A1') 我们无效,因为 A1 不是有效的 JSON 字符串表示。


对于where,你可以简单地做

WHERE JSON_CONTAINS('["A1", "A2", "BI"]', JSON_QUOTE(tbl2.refID))

它将在字符串周围添加引号并针对您的数组进行测试。