表中有一个 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"]','[', ''), ']', ''));
不评价
您可以在 JSON 中搜索该值是否存在,并带有
JSON_CONTAINS
请注意,
JSON_CONTAINS
需要在两个参数上提供有效的 JSON,因此 JSON_CONTAINS('["A1"]', 'A1')
我们无效,因为 A1
不是有效的 JSON 字符串表示形式。
对于哪里,你可以简单地做
WHERE JSON_CONTAINS('["A1", "A2", "BI"]', JSON_QUOTE(tbl2.refID))
它将在字符串周围添加引号并针对您的数组进行测试。
您也可以使用 Member OF mysql 函数。如果 json 数组包含元素,则返回 1,否则返回 0。