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

问题描述 投票:0回答:2

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

SET @ref = replace(replace('["A1", "A2", "BI"]','[', ''), ']', ''); SELECT @ref;
按我想要的方式返回“A1”、“A2”、“B1”,但无法在... WHERE tbl2.refID IN (@ref)

那么我如何评估数组以用作“WHERE IN”值?

表1

id id 数组 其他列
1 [“A1”,“A2”,“B1”]

表2

id 参考ID 第 3 栏
1 A1 [ ]
2 A2 [ ]

使用 table1.col2 的元素,我想从 table2 中选择 col3 并对其进行分组。

希望我能更好地说明它!

我尝试评估传递给 WHERE IN () 的数组列,但没有返回任何值。 不知何故评价被打破了。

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

mysql where-in json-arrayagg
2个回答
2
投票

您可以在 JSON 中搜索该值是否存在,并带有

JSON_CONTAINS

示例

请注意,

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


对于哪里,你可以简单地做

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

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


0
投票

您也可以使用 Member OF mysql 函数。如果 json 数组包含元素,则返回 1,否则返回 0。

© www.soinside.com 2019 - 2024. All rights reserved.