问题是我想将使用子查询的SELECT结果放在A_table A_LIST列中 where子句,以便它们可以匹配A_TABLE'A_List'和B_TABLE'userList'
A_TABLE
+-------+----------+
| A_LOG | A_List |
+-------+----------+
| WQ-83 | a |
| WQ-82 | b |
| WQ-89 | c |
| WQ-85 | d |
| WQ-86 | e |
| WQ-81 | f |
+-------+----------+
B_TABLE
+----------+--------------------+
| userName | userList |
+----------+--------------------+
| A_PERSON | ['a','b','c','d'] |
| B_PERSON | NULL |
+----------+--------------------+
b.table数据看起来像 ['a','b','c','d'] (列名-> userList)在同一列中,所以我使用replace来解析上下文
SELECT replace(replace(userList,'[',''),']','') from Btable
结果看起来像-> 'a','b','c','d',然后将此选择查询放入子查询中 A.table列表列数据在每列中看起来都像a,b,c
SELECT A_List from A_TABLE where A_List IN(
SELECT replace(replace(userList,'[',''),']','') from B_TABLE
)
但是此查询结果返回0个数据
所以我尝试
SELECT A_List from A_TABLE where A_List IN( 'a','b','c','d');
返回4行->正确的数据
+-------+----------+
| A_LOG | A_List |
+-------+----------+
| WQ-83 | a |
| WQ-82 | b |
| WQ-89 | c |
| WQ-85 | d |
+-------+----------+
我不知道为什么这个查询失败
最好的方法是什么?
答案 0 :(得分:0)
您当前的用户列表数据几乎看起来像一个有效的JSON数组,除了这些值应该用双引号而不是单引号引起来。假设您的数据如下所示:
["a","b","c","d"]
然后我们使用以下查询:
SELECT a.A_LOG, a.A_List
FROM A_TABLE a
WHERE EXISTS (SELECT 1 FROM B_TABLE b
WHERE JSON_SEARCH(b.userList, 'one', a.A_List) IS NOT NULL);